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 相关文章推荐
Array, Array Constructor, for in loop, typeof, instanceOf
Sep 13 Javascript
超级好用的jQuery圆角插件 Corner速成
Aug 31 Javascript
微信分享的标题、缩略图、连接及描述设置方法
Oct 14 Javascript
jQuery中fadein与fadeout方法用法示例
Sep 16 Javascript
JS生成随机打乱数组的方法示例
Dec 23 Javascript
聊聊JS动画库 Velocity.js的使用
Mar 13 Javascript
关于Vue在ie10下空白页的debug小结
May 02 Javascript
JS实现区分中英文并统计字符个数的方法示例
Jun 09 Javascript
vue+SSM实现验证码功能
Dec 07 Javascript
ant-design-vue 实现表格内部字段验证功能
Dec 16 Javascript
js仿360开机效果
Dec 26 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
Apr 26 Javascript
浅谈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
法国:浪漫之都的咖啡文化
2021/03/03 咖啡文化
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
基于php权限分配的实现代码
2013/04/28 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
vue router demo详解
2017/10/13 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
vue实现记事本功能
2019/06/26 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
python简单实现旋转图片的方法
2015/05/30 Python
Python实例一个类背后发生了什么
2016/02/09 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
北承题目(C++)
2012/05/16 面试题
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
高级Java程序员面试要点
2013/08/02 面试题
毕业生自我推荐
2013/11/04 职场文书
培训主管的岗位职责
2013/11/23 职场文书
法人授权委托书
2014/04/03 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2014年关工委工作总结
2014/11/17 职场文书
2014年物流工作总结
2014/11/25 职场文书
学校党支部承诺书
2015/04/30 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python
golang 实用库gotable的具体使用
2021/07/01 Golang