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 相关文章推荐
JS无限树状列表实现代码
Jan 11 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
Jan 12 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
Mar 21 Javascript
jquery实现九宫格大转盘抽奖
Nov 13 Javascript
分享我的jquery实现下拉菜单心的
Nov 29 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
Aug 20 Javascript
基于jQuery实现简单人工智能聊天室
Feb 10 Javascript
React Native中的RefreshContorl下拉刷新使用
Oct 09 Javascript
vue cli 3.0 搭建项目的图文教程
May 17 Javascript
JS实现纵向轮播图(初级版)
Jan 18 Javascript
js实现树形数据转成扁平数据的方法示例
Feb 27 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
Apr 21 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
php页面消耗内存过大的处理办法
2013/03/18 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
php实现购物车功能(下)
2016/01/05 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
干货!教大家如何选择Vue和React
2017/03/13 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
简单介绍Python中的floor()方法
2015/05/15 Python
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
python批量制作雷达图的实现方法
2016/07/26 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
django admin 添加自定义链接方式
2020/03/11 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
幼儿园元旦活动感言
2014/03/02 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
我在伊朗长大观后感
2015/06/16 职场文书
2016年社区服务活动总结
2016/04/06 职场文书