遍歷是日常操作华烟,這篇文章比較詳細(xì) 循環(huán)遍歷總結(jié)for/foreach/forin/forof/map/some/filter
總結(jié):
- 常規(guī)循環(huán)中翩迈,最快的是
for(j = 0,len=arr.length; j < len; j++) {}
-
for循環(huán)
的速度是最快的,是最老的循環(huán),也是優(yōu)化得最好的,其次是for-of
這個(gè)是es6才新增的循環(huán)非常好用, 最慢 是for-in
我們可以作一下速度排序
for > for-of > forEach > filter > map > for-in
參考文章
關(guān)于速度方面的也很多,這個(gè)是我隨便搜的:
js數(shù)組遍歷的8種方法盔夜,包括偽數(shù)組
JavaScript 數(shù)組遍歷方法的對(duì)比 (9種负饲,帶速度)
JS數(shù)組循環(huán)的性能和效率分析(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中,這樣每次循環(huán)時(shí)就不會(huì)再讀取數(shù)組的長(zhǎng)度。
- 第三種方式是將取值與判斷合并赏表,通過不停的枚舉每一項(xiàng)來循環(huán)检诗,直到枚舉到空值則循環(huán)結(jié)束。執(zhí)行順序是:
- 第一步:先聲明索引i = 0和變量person
- 第二步:取出數(shù)組的第i項(xiàng)persons[i]賦值給變量person并判斷是否為Truthy
- 第三步:執(zhí)行循環(huán)體瓢剿,打印person
- 第四步:i++逢慌。
// 當(dāng)?shù)诙街衊person`的值不再是[Truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy)時(shí),循環(huán)結(jié)束间狂。方法三甚至可以這樣寫
for (let i = 0, person; person = persons[i++];) {
console.log(person)
}
- 第四種方法是倒序循環(huán)攻泼。執(zhí)行的順序是
- 第一步:獲取數(shù)組長(zhǎng)度,賦值給變量i
- 第二步:判斷i是否大于0并執(zhí)行i--
- 第三步:執(zhí)行循環(huán)體鉴象,打印persons[i]忙菠,此時(shí)的i已經(jīng)-1了
從后向前,直到i === 0為止纺弊。這種方式不僅去除了每次循環(huán)中讀取數(shù)組長(zhǎng)度的操作,而且只創(chuàng)建了一個(gè)變量i牛欢。