参考文章:

1.js几种数组遍历方式以及性能分析对比

2.javaScript遍历对象、数组总结

首先是数组中可以使用的

1.for 循环

for (let i = 0; i < xxx.length; i++) {
...
}

  最基本的循环工具,常用于数据循环。据说性能相当不错...

2. 优化版的 for 循环

for(let i = 0,len=arr.length; i < len; i++) {
...
}

  使用变量将数组长度缓存起来,在数组较长的时候优化效果明显。因此,性能最优...

3.forEach

  数组方法。

arr.forEach(function(value[,index,array]){ // index, array 参数可选
...
});

  适用于循环次数未知或者计算次数比较麻烦的情况。性能不如 for 。

  另外,jquery 中还有一个 $.each() 方法,支持 数组 、 json对象 、 dom结构 的遍历。其 api 如下:

$.each(arr, function(index,element){
...
})
$.each(json1,function(key,value){  //遍历键值对
...
})

  这是 jquery each 的另外写法,多用于遍历元素。

$('domElement').each(function(index, val) { //第一个参数表示索引下标,第二个参数表示当前索引元素
...
})

  

  需要注意的是 forEach 和 $.each 回调函数中参数的位置。

4.forEach 变种

Array.prototype.forEach.call(arr,function(el){
...
});

  由于forEach 是数组方法,对于非数组类型数据,通过这种方法可以让类似的数组(如 NodeList )拥有 foreach 功能。

  性能弱于 forEach。

5.for ... in ...

for (var index in arr) {
...
}

  遍历数组的效率最低。且此时参数 i 是 string 型,而不是普通 for 当中的 number 型。

  另外,如果 Array 被扩充(原型上自定义了某些属性或者方法),这些扩充也会被遍历出来,容易出错。详情移步 https://www.cnblogs.com/yang-C-J/p/6284038.html

6.for ... of ... (es 6 标准)

  允许遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等。不可遍历普通对象。

for (var val of iterable) {
...
}

  for ... in ... 遍历 index,那么 for ... of ... 遍历 index 位置上的值。

  性能好于 for ... in ... 但是任然比不上 for。

7.map

  意如其字,映射,将原数组元素根据回调函数进行映射,不修改原数组,返回新数组。

var newArr = arr.map(function(Val,index,arr){
return 某一个规则
})

  示例:

var data = [1, 2, 3, 4];

var arrayOfSquares = data.map(function (item) {
return item * item;
}); alert(arrayOfSquares); // 1, 4, 9, 16

  效率比不上 forEach 。

  以上就是常用到的数组遍历的 api ,另外,es 6 还有一些 api:keys(),values(),entries(),它们都返回一个遍历器对象,可以用for...of循环进行遍历,唯一的区别是keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历,如:

for (let index of ['a', 'b'].keys()) {
console.log(index);
}
// 0
// 1
for (let elem of ['a', 'b'].values()) {
console.log(elem);
}
// 'a'
// 'b'
for (let [index, elem] of ['a', 'b'].entries()) {
console.log(index, elem);
}
// 0 "a"
// 1 "b"

对象中的遍历

1.object.keys()

  返回一个数组,值是对象的 keys ,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性).

var obj = {a:1,b:2,c:3}
var keys = Object.keys(obj);
console.log(keys)
// ['a', 'b', 'c']

2.for...in...

  同上

3.Object.getOwnPropertyNames(obj)

  返回一个数组,值是对象的 keys ,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性).

js 中常用的循环的更多相关文章

  1. 【温故知新】——原生js中常用的四种循环方式

    一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出“欢迎下次光临” 在网页中弹出框输入1   网页输出“查询中……” 在 ...

  2. Js中常用的字符串,数组,函数扩展

    由于最近辞职在家,自己的时间相对多一点.所以就根据prototytpeJS的API,结合自己正在看的司徒大神的<javascript框架设计>,整理了下Js中常用一些字符串,数组,函数扩展 ...

  3. js中常用的操作

    1.js中常用的数组操作 2.js中常用的字符串操作 3.js中常用的时间日期操作 4.定时器

  4. 基础篇:1.JavaScript运行在html中,引用有几种方式?—— 6.js中常用的输出方式?

    书接上文,上文提到若干条JavaScript的基础性知识,大部分都是一些概念性的东西,本着认真严谨的态度,我们要认真对待,有些条目的问题是某个知识点的周边延伸,为节约篇幅,就一起整理了,如有描述不对的 ...

  5. js事件、Js中的for循环和事件的关系、this

    一.js事件  1.事件 用户在网页中所触发的行为 鼠标滑动种类很多,键盘.表单特列: 点击:onclick 鼠标进入:onmouseenter 鼠标离开:onmouseleave 鼠标悬浮:onmo ...

  6. JS中常用开发知识点

     JS中常用开发知识点 1.获取指定范围内的随机数 2.随机获取数组中的元素 3.生成从0到指定值的数字数组 等同于: 4.打乱数字数组的顺序 5.对象转换为数组 //注意对象必须是以下格式的才可以通 ...

  7. js中常用的对象—String的属性和方法

    今天说一下,js中常用的内置对象——String对象它有以下几个常用的属性:lengthprototype 有以下几个常用的方法:parseInt()转换为数字parseFloat()转换为数字,支持 ...

  8. js中常用的对象—Array的属性和方法

    今天说一下,js中常用的内置对象——Array对象 Array常用属性: length prototype :给系统对象添加属性和方法 Array常用方法: Array.prototype.sum = ...

  9. php中的for循环和js中的for循环

    php中的for循环 循环100个0 for ($i=0;$i<=100;$i++){ $pnums.='0'.","; } js中的for循环,循环31个相同的数.循环日期 ...

随机推荐

  1. 如何理解render: h => h(App)

    学习vuejs的时候对这句代码不理解 new Vue({ el: '#app', router, store, i18n, render: h => h(App) }) 查找了有关资料,以下为结 ...

  2. linux内存源码分析 - 内存回收(lru链表)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 概述 对于整个内存回收来说,lru链表是关键中的关键,实际上整个内存回收,做的事情就是处理lru链表的收缩,所以 ...

  3. Unity热更新学习(一) —— AssetBundle 打包和加载

    理论不多说,网上,官方文档都有.  这里有一篇介绍很全面的文章:https://www.cnblogs.com/ybgame/p/3973177.html 示例和注意点记录一下,用到时以便查阅. 一. ...

  4. Spark性能调优

    Spark性能优化指南——基础篇 https://tech.meituan.com/spark-tuning-basic.html Spark性能优化指南——高级篇 https://tech.meit ...

  5. 蓝牙Legacy Pairing流程概述

    Legacy pairing 从名字上看可以知道它是老式设备采用的配对方法. 配对的最终目的是为了生成key,key可以给链路加密,保证双方设备通信的安全性.那配对流程的讲述其实就是key的生成过程. ...

  6. ESP8266-Arduino杀手?

    Arduino之所以流行可能是因为它的学习曲线比较平缓,另外是支持它的第三方程序库非常多,无论在什么平台上都比较容易入门.多年前我曾和一些搞嵌入开发多年的朋友请教,他们更建议我多点尝试STM的开发,A ...

  7. ASP.Net Core2.1中的HttpClientFactory系列二:集成Polly处理瞬态故障

    前言:最近,同事在工作中遇到了使用HttpClient,有些请求超时的问题,辅导员让我下去调研一下,HttpClinet的使用方式已经改成了之前博客中提到的方式,问题的原因我已经找到了,就是因为使用了 ...

  8. pycharm 常用快捷键操作

    #最重要的快捷键 1. ctrl+shift+A:万能命令行 2. shift两次:查看资源文件 #新建工程第一步操作 1. module设置把空包分层去掉,compact empty middle ...

  9. 百度软件开发实习生c++方向面经(一面)

    百度2017实习生软件开发(cpp方向) 首先说一下岗位.分为软件开发,开发测试,前端,机器学习数据挖掘,移动开发,据我观察,报的人数来看,软件开发最多,移动开发和开发测试较少.百度前台还准备了吃的喝 ...

  10. (第十三周)Final阶段用户调查报告

    项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:李俞寰.杜桥.栾骄阳.王东涵 用户调查报告 调查时间:2016年12月1日  21:00——2016年12月3日  12:00 项目分享链接 ...