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 关闭IE6、IE7
Jun 01 Javascript
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
Jan 22 Javascript
jquery ajax return没有返回值的解决方法
Oct 20 Javascript
js对象与打印对象分析比较
Apr 23 Javascript
JQuery中$.each 和$(selector).each()的区别详解
Mar 13 Javascript
jQuery下拉友情链接美化效果代码分享
Aug 26 Javascript
实例详解JavaScript获取链接参数的方法
Jan 01 Javascript
微信小程序 swiper制作tab切换实现附源码
Jan 21 Javascript
微信小程序动态的加载数据实例代码
Apr 14 Javascript
ionic3 懒加载
Aug 16 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
Sep 04 Javascript
详解Vue template 如何支持多个根结点
Feb 10 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在字符串中查找另一个字符串
2008/11/19 PHP
PHP 文件上传全攻略
2010/04/28 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
Django 导出项目依赖库到 requirements.txt过程解析
2019/08/23 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
python SVD压缩图像的实现代码
2019/11/05 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
Numpy ndarray 多维数组对象的使用
2021/02/10 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
canvas中普通动效与粒子动效的实现代码示例
2019/01/03 HTML / CSS
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
五十岁生日宴会答谢词
2014/01/15 职场文书
社区党总支书记先进事迹材料
2014/01/24 职场文书
《穷人》教学反思
2014/04/08 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
80后婚前协议书范本
2014/10/24 职场文书
教师党员自我评价范文
2015/03/04 职场文书
公司管理建议书
2015/09/14 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL