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 相关文章推荐
jQuery检测输入的字符串包含的中英文的数量
Apr 17 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
Jun 11 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
理解javascript中的严格模式
Feb 01 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
Jun 09 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
Jan 04 Javascript
jquery replace方法去空格
May 08 jQuery
element-ui 设置菜单栏展开的方法
Aug 22 Javascript
Vue的watch和computed方法的使用及区别介绍
Sep 06 Javascript
vue图片加载失败时用默认图片替换的方法
Aug 29 Javascript
p5.js实现简单货车运动动画
Oct 23 Javascript
Vue实现点击当前行变色
Dec 14 Vue.js
浅谈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实现与ASP Banner组件相似的类
2006/10/09 PHP
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
jquery 笔记 事件
2011/11/02 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
关于iframe跨域POST提交的方法示例
2017/01/15 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
深入理解Python 代码优化详解
2014/10/27 Python
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
Python获取指定字符前面的所有字符方法
2018/05/02 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
python通过opencv实现图片裁剪原理解析
2020/01/19 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers
Hive导入csv文件示例
2022/06/25 数据库