JS数组与对象的遍历方法大全

    本文简单解析各种数组和对象属性的遍历方法:

  • 原生for循环、for-in及forEach
  • ES6 for-of方法遍历类数组集合
  • Object.key()返回键名的集合
  • jQuery的$.each()
  • underscore的_.each()

    文中的范例基于以下数组和对象。

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>

  

 


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

coordin.h与coordin.h

如果文件包含在尖括号中&#xff0c;则C编译器将在存储标准文件的主机系统的文件系统中查找&#xff1b; 如果文件名包含在双引号中&#xff0c;则编译器将首先查找当前的工作目录或源代码目录。如果没有在那里找到头文件&#xff0c;则将在标准位置查找。转载于:https://www.c…

java二嗨租车项目_Java入门第二季6-1租车项目代码

一共有5个类Car类 //作为父类package com.imooc;public class Car {public int ID;public String name;public int rent;public int PersonCapacity;public int GoodsCapacity;}2.passengerCar //客车public class passengerCar extends Car{public passengerCar(int newID,Str…

go语言基础知识笔记(二)之数组和切片

数组和切片知识用的也是比较多&#xff0c;的给我们工作带来很大的便利 &#xff08;一&#xff09; 数组 定义&#xff1a;在golang中数组的长度是不可变&#xff0c;数组存放要求是同一种数据类型 //golang中数组定义的四种方法1.先声明&#xff0c;后赋值  var arr1 [2]in…

错误处理在Spring Integration中如何工作

1.引言 这篇文章的目标是向您展示将消息传递系统与Spring Integration结合使用时如何处理错误。 您将看到同步和异步消息传递之间的错误处理有所不同。 和往常一样&#xff0c;我将跳过聊天并继续进行一些示例。 您可以在github上获取源代码。 2&#xff0c;样品申请 我将使用…

原生js、jQuery实现选项卡功能

在大家在网上平常浏览网页的时候&#xff0c;想必各位都会看到选项卡功能&#xff0c;在这里给大家详解一下用原生js、jQuery如何来写一些基本的选项卡 话不多说&#xff0c;先给各位看一下功能图&#xff1a; 好了&#xff0c;下边开始写代码了&#xff1a; HTML代码&#x…

.NET core2.0 发布至IIS中

.NET CORE和asp.net 发布时不太一样&#xff0c;ASP.NET Core不再是由IIS工作进程&#xff08;w3wp.exe&#xff09;托管&#xff0c;而是使用自托管Web服务器&#xff08;Kestrel&#xff09;运行&#xff0c;IIS则是作为反向代理的角色转发请求到Kestrel不同端口的ASP.NET Co…

深入了解Java 8日期和时间API

在这篇文章中&#xff0c;我们将更深入地了解通过Java 8获得的新的Date / Time API&#xff08; JSR 310 &#xff09;。 请注意&#xff0c;本文主要由显示新API功能的代码示例驱动。 我认为这些示例是不言自明的&#xff0c;因此我没有花太多时间在它们周围写文本:-) 让我们…

P4047 部落划分

这题太水了吧&#xff0c;不知道怎么蓝的&#xff0c;蒟蒻只写了十五分钟就一次AC了…… 但是挺有意思&#xff0c;就发篇题解吧qwq emmm……最小生成树&#xff08;贪心&#xff09;&#xff0c;就没别的了…… 要明确&#xff1a; 一开始可以把每个点都看成一个部落&#xff…

如何用纯 CSS 创作一个文本淡入淡出的 loader 动画

效果预览 在线演示 按下右侧的“点击预览”按钮可以在当前页面预览&#xff0c;点击链接可以全屏预览。https://codepen.io/comehope/pen/ERwpeG可交互视频此视频是可以交互的&#xff0c;你可以随时暂停视频&#xff0c;编辑视频中的代码。请用 chrome, safari, edge 打开观…

java csf_WebService CSF使用详解 | 学步园

一建立service:1)CxfService&#xff1a;WebServicepublicinterfaceCxfService {WebMethodpublicWebResultList getTasksByActor(WebParam(name"actor") String actor);WebMethodpublicvoidcreateAndStartProcessInstance(WebParam(name"processName") Str…

软件工程和项目管理的区别

软件工程的定义&#xff1a; 软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件&#xff0c;以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。 项目管理的定义&#xff1a; 项目管理是一个管理学分支的学…

如何启动多个WebLogic托管服务器

WebLogic Server文档建议您创建专用的管理服务器&#xff0c;然后分离托管服务器以进行应用程序部署。 在这里&#xff0c;我将向您展示如何在与管理服务器相同的主机中创建一个或多个托管服务器。 我假设您已经安装了WLS&#xff0c;并已创建并正在运行自己的域。 如果您以前…

《机器学习基石》第一周 —— When Can Machine Learn?

&#xff08;注&#xff1a;由于之前进行了吴恩达机器学习课程的学习&#xff0c;其中有部分内容与机器学习基石的内容重叠&#xff0c;所以以下该系列的笔记只记录新的知识&#xff09; 《机器学习基石》课程围绕着下面这四个问题而展开&#xff1a; 主要内容&#xff1a; 一、…

如何用纯 CSS 创作一盘传统蚊香

效果预览 在线演示 按下右侧的“点击预览”按钮可以在当前页面预览&#xff0c;点击链接可以全屏预览。https://codepen.io/comehope/pen/BVpvMz可交互视频教程此视频是可以交互的&#xff0c;你可以随时暂停视频&#xff0c;编辑视频中的代码。请用 chrome, safari, edge 打…

LeetCode 905. 按奇偶排序数组

LeetCode 905. 按奇偶排序数组 转载于:https://www.cnblogs.com/hglibin/p/10794792.html

java父类序列化_父类的序列化与 Transient 关键字

情境&#xff1a;一个子类实现了 Serializable 接口&#xff0c;它的父类都没有实现 Serializable 接口&#xff0c;序列化该子类对象&#xff0c;然后反序列化后输出父类定义的某变量的数值&#xff0c;该变量数值与序列化时的数值不同。解决&#xff1a;要想将父类对象也序列…

Java:在Runnable中处理RuntimeException

去年年底&#xff0c;我正在运行预定的任务来监视Neo4j集群&#xff0c;而我遇到的问题之一是有时监视会退出。 我最终意识到这是因为RuntimeException被抛出到Runnable方法中&#xff0c;而我没有处理它。 以下代码演示了该问题&#xff1a; import java.util.ArrayList; im…

错误代码: 1231 - Variable 'sql_mode' can't be set to the value of 'NULL'

错误代码&#xff1a; 1231 - Variable sql_mode cant be set to the value of NULL 错误代码&#xff1a; 1231 - Variable sql_mode cant be set to the value of NULL 错误代码&#xff1a; 1231 - Variable sql_mode cant be set to the value of NULL mysql中的提示 删除注…

[Unity3D]Unity3D游戏开发之怪物AI

大家好。欢迎大家关注由我为大家带来的Unity3D游戏开发系列文章&#xff0c;我的博客地址为&#xff1a;http://blog.csdn.net/qinyuanpei。在上一篇文章中&#xff0c;我们基本上实现了一个小地图的功能&#xff0c;今天呢&#xff0c;我们来实现怪物AI&#xff0c;所谓怪物AI…

中国第一批写java的人_中国java开源界最可爱的人们

评论# re: 中国java开源界最可爱的人们2007-12-07 15:29sitinspring如果少一些抒情,多一点实质内容,文章更耐看. 回复 更多评论# re: 中国java开源界最可爱的人们[未登录]2007-12-07 15:49dennis竟然没有满江红&#xff0c;opendoc的意义不用多说了吧 回复 更多评论# re: 中…