JS数组及对象遍历方法代码汇总


Posted in Javascript onJune 16, 2020

文中的范例基于以下数组和对象。

var arrTmp = ["value1","value2","value3"];
var objTmp = {
  aa:"value1",
  bb:"value2",
  cc:function(){
    console.log("value3")
  }
}

一、JS原生方法

1. javascript遍历的常用的遍历方法是for循环和for-in,ES5的时候加上了forEach方法(IE9以下不支持)。

/****js原生遍历****/
//for循环遍历数组
for(var i=0;i<arrTmp.length;i++){
  console.log(i+": "+arrTmp[i])
}
 
//for-in遍历对象属性,i指代属性名
for(var i in objTmp){
  console.log(i+": "+objTmp[i])
}
 
//forEach遍历数组,三个参数依次是数组元素、索引、数组本身
arrTmp.forEach(function(value,index,array){
  console.log(value+","+index+","+array[index])
})

2. for-in循环是为了遍历对象而设计的,事实上for-in也能用来遍历数组,但定义的索引i是字符串类型的。如果数组具有一个可枚举的方法,也会被for-in遍历到,例如:

//for-in遍历数组
for(var i in arrTmp){
  console.log(i+": "+arrTmp[i])
}
//for-in会遍历到数组的属性
arrTmp.name="myTest";
for(var i in arrTmp){
  console.log(i+":"+arrTmp[i])
}
//输出 0:value1 1:value2 2:value3 name:myTest

3. for循环和for-in能正确响应break、continue和return语句,但forEach不行。

//只会输出value1 value2
for(var i=0;i<arrTmp.length;i++){
  console.log(i+": "+arrTmp[i]);
  if(i==1){
    break;
  }
}
//会输出value1 value2 value3
arrTmp.forEach(function(value){
  console.log(value+);
  if(value==1){
    return;
  }
})

4. ES6中,新增了for-of遍历方法。它被设计用来遍历各种类数组集合,例如DOM NodeList对象、Map和Set对象,甚至字符串也行。官方的说法是:

for...of语句在可迭代对象(包括 Array, Map, Set, String, TypedArray,arguments 对象等等)上创建一个迭代循环,对每个不同属性的属性值,调用一个自定义的有执行语句的迭代挂钩

// for-of遍历数组,不带索引,i即为数组元素
for(let i of arrTmp){
  console.log(i)
}
//输出 "value1" "value2" "value3"
 
// for-of遍历Map对象
let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]);
for (let [key, value] of iterable) {
 console.log(value);
}
//输出 1 2 3
 
// for-of遍历字符串
let iterable = "china中国";
for (let value of iterable) {
 console.log(value);
}
//输出 "c" "h" "i" "n" "a" "中" "国"

5. 上面的方法,注重点都是数组的元素或者对象的属性值。如果单纯的想获取对象的属性名,js有原生的Object.keys()方法(低版本IE不兼容),返回一个由对象的可枚举属性名组成的数组:

/****Object.keys()返回键名数组****/
//数组类型
let arr = ["a", "b", "c"];
console.log(Object.keys(arr));
// (3) ['0', '1', '2']
 
// 类数组对象
let anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj));
// (3) ['2', '7', '100']
 
//一般对象
let xyz = {z: "zzz", x: "xxx", y: "yyy"};
console.log(Object.keys(xyz));
// (3) ["z", "x", "y"]

javascript原生遍历方法的建议用法:

  • 用for循环遍历数组
  • 用for-in遍历对象
  • 用for-of遍历类数组对象(ES6)
  • 用Object.keys()获取对象属性名的集合

二、jQuery的$.each

jQuery的遍历方法通常被用来遍历DOM元素,用于数组和对象的是$.each()方法,它接受两个参数,分别指代属性名/数组索引和属性值/数组元素:

/****$.each()遍历对象和数组****/
$.each(arrTmp,function(index,value){
  console.log(index+": "+value)
});
 
$.each(objTmp,function(key,value){
  console.log(key+": "+value)
});

三、underscore的_.each()遍历

underscore.js是一个较流行的插件库,它封住了一些对数组和对象的处理方法。_.each()就用来遍历:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type="text/javascript" src="../lib/underscore.js"></script>
</head>
<body>
<script type="text/javascript">
 
var arrTmp = ["value1", "value2", "value3"];
var objTmp = {
  aa: "value1",
  bb: "value2",
  cc: function () {
    console.log("value3")
  }
};
 
//_.each()接受三个参数,分别指代键值、键名和被遍历的对象本身
_.each(arrTmp,function(value,index,array){
  console.log(index +","+ value +","+ array[index])
})
_.each(objTmp,function(value,key,obj){
  console.log(key +","+ value +","+ obj[key])
})
</script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
May 14 Javascript
js图片延迟加载的实现方法及思路
Jul 22 Javascript
JavaScript匿名函数与委托使用示例
Jul 22 Javascript
javascript实现连续赋值
Aug 10 Javascript
JavaScript html5 canvas绘制时钟效果
Mar 01 Javascript
javascript中不易分清的slice,splice和split三个函数
Mar 29 Javascript
全面接触神奇的Bootstrap导航条实战篇
Aug 01 Javascript
js return返回多个值,通过对象的属性访问方法
Feb 21 Javascript
JavaScript指定断点操作实例教程
Sep 18 Javascript
JS实现获取数组中最大值或最小值功能示例
Mar 02 Javascript
发布订阅模式在vue中的实际运用实例详解
Jun 09 Javascript
jquery选择器和属性对象的操作实例分析
Jan 10 jQuery
浅谈Vue 函数式组件的使用技巧
Jun 16 #Javascript
原生JS实现天气预报
Jun 16 #Javascript
vue实现公告栏文字上下滚动效果的示例代码
Jun 16 #Javascript
原生JS实现无缝轮播图片
Jun 24 #Javascript
如何利用Node.js与JSON搭建简单的动态服务器
Jun 16 #Javascript
js+css实现全屏侧边栏
Jun 16 #Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
Jun 15 #Javascript
You might like
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
JavaScript实现表格排序方法
2013/06/14 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
[03:18]【TI9纪实】社区大触GL与木木
2019/08/25 DOTA
详细介绍Python语言中的按位运算符
2013/11/26 Python
python 文件操作api(文件操作函数)
2016/08/28 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
2016/09/11 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
python实现简单的五子棋游戏
2020/09/01 Python
泰国网上购物:Shopee泰国
2018/09/14 全球购物
演讲稿祖国在我心中
2014/05/04 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
普通党员个人整改措施
2014/10/27 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
文员岗位职责范本
2015/04/16 职场文书
运动会跳远广播稿
2015/08/19 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
辞职信怎么写?
2019/05/21 职场文书