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 ...
随机推荐
- django基本入门
1.创建应用 2.设计模型 3.语言时区等设置 4. Templates 1.创建应用[MVT] 一个项目可以有多个应用[模块]: 这里已经创建了项目:test1 python manager.py ...
- 探寻hashmap
Hashmap源码 1. 构造器: a)获得默认数组大小:1>>4 :16 b) 获得负载因子:0.75:衡量hashmap的空间使用程度 i.过大:使用空间更加充分,但是查找效率变低, ...
- Cocos2d-js 开发记录-初始
GameDev标签很早就建了,现在终于可以往里面添加第一篇文章了. 最近和朋友在做几个小游戏,就是微信社交中的那些有点2的游戏,我自己也觉得有点傻,不过先从小的做起,平时想想挺简单的事情,一旦自己真做 ...
- JavaScirpt(JS)——js介绍及ECMAScript
一.JavaScript历史发展 JavaScript语言的历史:http://javascript.ruanyifeng.com/introduction/history.html 1994年12月 ...
- webpack、babel模块、模块化
一.webpack介绍 webpack这个工具非常强大,解决了前端很繁琐的一些工具流程繁琐的事情.中文官网链接地址:https://www.webpackjs.com/ 1.为什么要使用webpack ...
- scss-@each指令
一.@each指令实例 在@each变量的定义,其中包含的每个项目的列表中的值. 语法: @each $var in <list or map> 语法简要说明如下. $var: 它代表了变 ...
- Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比--转载
在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一 ...
- 缓存溢出Buffer Overflow
缓存溢出(Buffer overflow),是指在存在缓存溢出安全漏洞的计算机中,攻击者可以用超出常规长度的字符数来填满一个域,通常是内存区地址.在某些情况下,这些过量的字符能够作为“可执行”代码来运 ...
- 爬虫入门之handler与opener(三)
1 自定义opener opener是 urllib.request.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的模块构建好的opener 但是基本的ur ...
- C# 任务并行库使用小计 z
1.简单创建使用 using System; using System.Diagnostics; using System.Threading; using System.Threading.Task ...