数组遍历速度&for循环速度
2019-07-01 本文已影响0人
anddju
遍历是日常操作,这篇文章比较详细 循环遍历总结for/foreach/forin/forof/map/some/filter
总结:
- 常规循环中,最快的是
for(j = 0,len=arr.length; j < len; j++) {}
-
for循环
的速度是最快的,是最老的循环,也是优化得最好的,其次是for-of
这个是es6才新增的循环非常好用, 最慢 是for-in
我们可以作一下速度排序
for > for-of > forEach > filter > map > for-in
参考文章
关于速度方面的也很多,这个是我随便搜的:
js数组遍历的8种方法,包括伪数组
JS数组循环的性能和效率分析(for、while、forEach、map、for of)
for 遍历方法
const persons = ['郑昊川', '钟忠', '高晓波', '韦贵铁', '杨俊', '宋灿']
// 方法一
for (let i = 0; i < persons.length; i++) {
console.log(persons[i])
}
// 方法二
for (let i = 0, len = persons.length; i < len; i++) {
console.log(persons[i])
}
// 方法三
for (let i = 0, person; person = persons[i]; i++) {
console.log(person)
}
// 方法四
for (let i = persons.length; i--;) {
console.log(persons[i])
}
- 第一种方法是最常见的方式,不解释。
- 第二种方法是将persons.length缓存到变量len中,这样每次循环时就不会再读取数组的长度。
- 第三种方式是将取值与判断合并,通过不停的枚举每一项来循环,直到枚举到空值则循环结束。执行顺序是:
- 第一步:先声明索引i = 0和变量person
- 第二步:取出数组的第i项persons[i]赋值给变量person并判断是否为Truthy
- 第三步:执行循环体,打印person
- 第四步:i++。
// 当第二步中`person`的值不再是[Truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy)时,循环结束。方法三甚至可以这样写
for (let i = 0, person; person = persons[i++];) {
console.log(person)
}
- 第四种方法是倒序循环。执行的顺序是
- 第一步:获取数组长度,赋值给变量i
- 第二步:判断i是否大于0并执行i--
- 第三步:执行循环体,打印persons[i],此时的i已经-1了
从后向前,直到i === 0为止。这种方式不仅去除了每次循环中读取数组长度的操作,而且只创建了一个变量i。