JS中遍历数组、对象的方式
1.标准的for循环遍历数组
//不打印自定义属性和继承属性
var array = [1,2,3];
for (var i = 0; i < array.length; i++) {
console.log(array[i]);
}
2.for in 遍历对象
不要用for in遍历数组,因为还会打印自定义属性和继承属性
一般常用来遍历非数组的对象并且使用hasOwnProperty()方法去过滤掉原型链上的属性
数组的key是string类型,因为js中一切皆为对象。
var array = [1,2,3];
//自定义属性
array.desc ='four';
//继承属性 扩展了js原生的Array
Array.prototype.test=function(){}
array.hasOwnProperty('desc') //true
array.hasOwnProperty('test') //false
for(var key in array){
console.log(array[key])
}
3.for of遍历数组
ES6里引入了一种遍历器(Iterator)机制,为不同的数据结构提供统一的访问机制。只要部署了Iterator的数据结构都可以使用 for ··· of ··· 完成遍历操作
它既比传统的for循环简洁,同时弥补了forEach和for-in循环的短板。
循环遍历键值对的value,与for in遍历key相反
如果实在想用for…of来遍历普通对象的属性,可以先获取对象的所有key的数组Object.keys(),然后遍历
( Iterator详解 :http://es6.ruanyifeng.com/#docs/iterator )
( for of 例子:https://www.cnblogs.com/m2maomao/p/7743143.html )
//不打印自定义属性和继承属性
for(var value of array){
console.log(value)
}
4.forEach遍历数组 VS map VS $.each
forEach遍历数组,而且在遍历的过程中不能被终止,必须每一个值遍历一遍后才能停下来
//不打印自定义属性和继承属性
array.forEach((value,index,arr)=>{
console.log(value);
});
//注意其与jQuery的$.each类似,只不过第1个和第2个参数正好是相反的
//thisArg为执行回调时的this值
[].forEach(function(value, index, array) { /*...*/ } ,thisArg) //返回值:undefined
[].map(function(value,index,array){ return value*2 }, thisArg) //返回值:返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
$.each([], function(index, value) { /*...*/ }); //$.each遍历数组或者类数组
5.$.each
$.each([], function(index, value) { /*...*/ }); //$.each遍历数组或者类数组
$.each({}, function(key, value) { /*...*/ }); //$.each遍历Object
$().each(function(index, value) { /*...*/ }); //遍历Dom元素
跳出 JQuery each循环,要实现break和continue的功能
- return false; ——跳出所有循环;相当于for中break 效果。
- return true; ——跳出当前循环,进入下一个循环;相当于for中continue 效果
对于类似数组的结构,可转换为数组
//divList不是数组,而是nodeList
var divList = document.querySelectorAll('div');
[].slice.call(divList)
Array.prototype.slice.call(divList)
[...divList] //ES6写法
总结:
- forEach 遍历数组,而且在遍历的过程中不能被终止,必须每一个值遍历一遍后才能停下来
- for in 以任意顺序遍历对象的可枚举属性,(最好不要用来遍历数组) 因此当迭代那些访问次序重要的 arrays 时用整数索引去进行 for 循环 (或者使用 Array.prototype.forEach() 或 for...of 循环) 。
- (ES6)for...of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等。不能遍历普通对象
- for...in 遍历(当前对象及其原型上的)每一个key,而 for...of遍历(当前对象上的)每一个value;
JS中遍历数组、对象的方式的更多相关文章
- js中的数组对象排序
一.普通数组排序 js中用方法sort()为数组排序.sort()方法有一个可选参数,是用来确定元素顺序的函数.如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序.如: var ar ...
- js中的数组对象排序(方法sort()详细介绍)
定义和用法 sort() 方法用于对数组的元素进行排序. 语法 arrayObject.sort(sortby) 参数sortby:可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意 ...
- js,jquery遍历数组,对象
each的用法 1.数组中的each 复制代码 var arr = [ "one", "two", "three", "four ...
- js中的数组对象中的方法解析
concat()方法: 合并两个数组,返回新对象的结果: join()方法 : 把数组内的所有元素加入到一个字符串中,传入的分隔符就是指定的分隔符 pop()方法: 删除数组并返回数组的最后一个元 ...
- js中如何访问对象和数组
js中如何访问对象和数组 一.总结 一句话总结:js访问对象点和中括号,访问数组的话就是中括号 对象 . [] 数组 [] 1.js访问对象的两种方式? . [] 可以使用下面两种方式访问对象的属性和 ...
- js中的数组遍历
js中的数组遍历是项目中经常用到的,在这里将几种方法做个对比. ! for循环:使用评率最高,也是最基本的一种遍历方式. let arr = ['a','b','c','d','e']; for (l ...
- 遍历js中的数组
可以使用js中的for循环,或者forEach方法:也可以使用Ext中的方法遍历js中的数组 代码如下: /** * 遍历数组 */ var arr = ['越南', '新加坡', '美国', '俄罗 ...
- JS/Jquery遍历JSON对象、JSON数组、JSON数组字符串、JSON对象字符串
JS遍历JSON对象 JS遍历JSON对象 <script> var obj = { "goodsid": "01001", "goods ...
- js中 给json对象添加属性和json数组添加元素
js中 给json对象添加新的属性 比如现在有一个json对象为jsonObj,需要给这个对象添加新的属性newParam,同时给newParam赋值为pre.做法如下: var obj={ &quo ...
随机推荐
- kafka基本机制
Kafka目前主要作为一个分布式的发布订阅式的消息系统使用,下面简单介绍一下kafka的基本机制 1.3.1 消息传输流程 Producer即生产者,向Kafka集群发送消息,在发送消息之前,会对消息 ...
- javascript:中文等字符转成unicode
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- .NET开源工作流RoadFlow-表单设计-隐藏域
隐藏域即<input type="hidden" value=""/>标签:
- SharePoint 2013 - Designer Workflow
另一篇文章 SharePoint Designer - Workflow 1. 可以定义每个Stage的名称,并将Stage名称显示在工作流状态字段,相比于SP2010时仅有的in progress ...
- Appcan开发之页面布局与CSS排版(转)
在Appcan开发中,首先要进行的就是页面布局,然后在这个页面上填充数据,加上互动元素,最终构成完整的应用. 因为appcan是使用HTML5+CSS3+JavaScript技术来进行开发,所以与普通 ...
- keras 保存模型
转自:https://blog.csdn.net/u010159842/article/details/54407745,感谢分享! 我们不推荐使用pickle或cPickle来保存Keras模型 你 ...
- java面试题全集(上)--java基础
本文转载自:https://blog.csdn.net/jackfrued/article/details/44921941 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - ...
- asyncio标准库7 Producer/consumer
使用asyncio.Queue import asyncio import random async def produce(queue, n): for x in range(1, n + 1): ...
- collectd配置
udp proxy - 192.168.48.112 cat > /etc/collectd_25801.conf << EOF Hostname "kvm-48-112& ...
- SQL Server 数据库修改后不允许保存
打开 工具 - > 选项 -> 设计器,确认[阻止保存要求重新创建表的更改]项是否选中,如果选中,取消即可.