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 相关文章推荐
推荐17个优美新鲜的jQuery的工具提示插件
Sep 14 Javascript
扩展JS Date对象时间格式化功能的小例子
Dec 02 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
Jun 13 Javascript
JavaScript定时器和优化的取消定时器方法
Jul 03 Javascript
JavaScript识别网页关键字并进行描红的方法
Nov 09 Javascript
什么是JavaScript中的结果值?
Oct 08 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
Mar 03 Javascript
详解基于webpack和vue.js搭建开发环境
Apr 05 Javascript
Bootstrap输入框组件使用详解
Jun 09 Javascript
BootStrap的双日历时间控件使用
Jul 25 Javascript
js使用highlight.js高亮你的代码
Aug 18 Javascript
jQuery事件blur()方法的使用实例讲解
Mar 30 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
自定义PHP分页函数
2006/10/09 PHP
PHP 读取文件的正确方法
2009/04/29 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
pytyon 带有重复的全排列
2013/08/13 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
用python写爬虫简单吗
2020/07/28 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
集团公司总经理岗位职责
2013/12/20 职场文书
单位工作证明
2014/10/07 职场文书
绿色校园广播稿
2014/10/13 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书