成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

遍歷數組:for、for-in、forEach、for-of

開發 前端
正如我們所看到的,for-of 循環比 for、for-in 和 .forEach() 的可用性要好。

這篇文章比較了遍歷數組的四種方式:

for 循環:

  1. for (let index=0; index < someArray.length; index++) { 
  2.   const elem = someArray[index]; 
  3.   // ··· 

for-in 循環:

  1. for (const key in someArray) { 
  2.   console.log(key); 

數組的 .forEach() 方法:

  1. someArray.forEach((elem, index) => { 
  2.   console.log(elem, index); 
  3. }); 

for-of 循環:

  1. for (const elem of someArray) { 
  2.   console.log(elem); 

for-of 往往是最好的選擇,我們會知道為什么。

for 循環[ES1]

JavaScript中的普通 for 循環已經很老了,它在ECMAScript 1中就已經存在了。這個 `for` 循環記錄了arr的每個元素的索引和值:

  1. const arr = ['a', 'b', 'c']; 
  2. arr.prop = 'property value'
  3.  
  4. for (let index=0; index < arr.length; index++) { 
  5.   const elem = arr[index]; 
  6.   console.log(index, elem); 
  7.  
  8. // 輸出: 
  9. // 0, 'a' 
  10. // 1, 'b' 
  11. // 2, 'c 

此循環的優缺點是什么?

  • 它是相當通用的,但可惜的是,當我們要做的是在一個數組上循環時,它也很啰嗦。
  • 如果我們不想從第一個 Array 元素開始循環,它還是很有用的。其他的循環機制都不能讓我們這樣做。

for-in 循環 [ES1]

for-in 循環和 for 循環一樣古老--它在ECMAScript 1中也已經存在。這個 for-in 循環記錄了arr的鍵:

  1. const arr = ['a', 'b', 'c']; 
  2. arr.prop = 'property value'
  3.  
  4. for (const key in arr) { 
  5.   console.log(key); 
  6.  
  7. // 輸出: 
  8. // '0' 
  9. // '1' 
  10. // '2' 
  11. // 'prop' 

for-in 不是循環遍歷數組的好選擇:

  • 它訪問屬性鍵,而不是值。
  • 作為屬性鍵,Array元素的索引是字符串,而不是數字
  • 它訪問所有可枚舉的屬性鍵(包括自有的和繼承的),而不僅僅是Array元素的屬性鍵。

for-in 訪問繼承的屬性確實有一個用例:循環一個對象的所有可枚舉屬性。

Array方法.forEach() [ES5]

考慮到 for 和 for-in 都不是特別適合在Array上循環,在ECMAScript 5中引入了一個輔助方法:Array.prototype.forEach()。

  1. const arr = ['a', 'b', 'c']; 
  2. arr.prop = 'property value'
  3.  
  4. arr.forEach((elem, index) => { 
  5.   console.log(elem, index); 
  6. }); 
  7.  
  8. // 輸出: 
  9. // 'a', 0 
  10. // 'b', 1 
  11. // 'c', 2 

這個方法真的很方便。它讓我們無需做太多事情就能訪問 Array 元素和 Array 元素索引。箭頭函數(在ES6中引入)使這種方法在語法上更加優雅。

.forEach() 的主要缺點是:

  • 你不能在這種循環的“主體”中使用 await。
  • 你不能提早退出 .forEach() 循環,在 for 循環中,我們可以使用 break。

退出.forEach()--一個變通方法

如果你想使用像 .forEach() 這樣的循環并提前離開,有一個變通的辦法:.some() 也會在所有Array元素上循環,如果它的回調返回一個真值,就會停止。

  1. onst arr = ['red', 'green', 'blue']; 
  2. arr.some((elem, index) => { 
  3.   if (index >= 2) { 
  4.     return true; // break from loop 
  5.   } 
  6.   console.log(elem); 
  7.   // This callback implicitly returns `undefined`, which 
  8.   // is a falsy value. Therefore, looping continues. 
  9. }); 
  10.  
  11. // 輸出: 
  12. // 'red' 
  13. // 'green' 

可以說,這是對 .some() 的濫用,我不知道這段代碼有多容易理解(與 for-of 和 break 相比)。

for-of 循環 [ES6]

在ECMAScript 6中,for-of 循環被添加到JavaScript中。

  1. const arr = ['a', 'b', 'c']; 
  2. arr.prop = 'property value'
  3.  
  4. for (const elem of arr) { 
  5.   console.log(elem); 
  6. // 輸出: 
  7. // 'a' 
  8. // 'b' 
  9. // 'c' 

for-of 非常適合循環遍歷數組:

  • 它在數組元素上進行迭代。
  • 我們可以使用 await:而且,如果需要,可以輕松遷移到 for-await-of。
  • 我們可以使用 break 和 continue --即使是外部范圍。

for-of 和 iterable 對象

for-of 的另一個好處是,我們不僅可以在Arrays上循環,還可以在任何可迭代對象上循環--例如,在Maps上循環。

  1. const myMap = new Map() 
  2.   .set(false, 'no') 
  3.   .set(true, 'yes') 
  4. for (const [key, value] of myMap) { 
  5.   console.log(key, value); 
  6.  
  7. // 輸出: 
  8. // false, 'no' 
  9. // true, 'yes' 

在 myMap 上迭代產生 [key, value] 對,我們對其進行解構,以直接訪問每個對的組件。

for-of 與 數組下標

數組方法 .entries() 在 [index, value] 對上返回一個可迭代對象。如果使用 for-of 和解構這個方法,我們可以方便地訪問Array索引。

  1. const arr = ['chocolate', 'vanilla', 'strawberry']; 
  2.  
  3. for (const [index, elem] of arr.entries()) { 
  4.   console.log(index, elem); 
  5. // 輸出: 
  6. // 0, 'chocolate' 
  7. // 1, 'vanilla' 
  8. // 2, 'strawberry' 

總結

正如我們所看到的,for-of 循環比 for、for-in 和 .forEach() 的可用性要好。

四種循環機制之間的任何性能差異通常都不重要。如果有的話,你可能正在做一些計算量非常大的事情,切換到WebAssembly可能是有意義的。

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2022-09-07 11:52:48

forforEach前端

2019-07-25 10:08:05

JavaScript數組轉換

2009-11-17 15:00:19

PHP遍歷數組

2021-02-05 23:08:10

JS代碼循環

2024-03-11 01:00:00

jsfor循環

2010-04-16 10:24:17

Oracle存儲過程

2019-03-04 09:22:52

阿里巴巴foreach Java

2025-03-17 08:30:00

JavaScript循環代碼

2016-08-05 14:48:00

javascripthtml前端

2010-11-24 13:11:06

MySQL遍歷數據表

2020-11-16 10:19:33

Java

2025-05-08 08:10:53

2023-12-11 21:45:52

Javaforeach循環結構

2021-11-05 06:57:49

數組對象遍歷器

2024-08-30 08:43:24

JavaScriptforEachfor循環

2024-04-25 07:54:46

遍歷數組PythonFor循環

2009-11-17 15:07:16

PHP數組遍歷

2021-11-24 08:43:02

扁平化函數數組

2009-12-09 09:30:21

PHP foreach

2020-12-22 14:11:45

JS forEach()map()
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人在线视频网站 | 黄篇网址 | 欧美成人第一页 | 国产精品不卡一区二区三区 | 国产精品亚洲精品日韩已方 | 亚洲三级视频 | 日韩欧美三级电影 | 久久大香 | 久久精品中文 | 亚洲精品一区二区三区在线 | 久久精品视频一区二区三区 | 亚洲福利一区 | 日本一区二区不卡 | 99精品久久久 | 中文字幕11页 | 91av视频在线免费观看 | 九九综合 | 另类亚洲视频 | 久久久久久久国产 | 成人av免费 | 欧美日韩在线一区二区 | 亚洲午夜电影 | 98成人网 | 日本精品国产 | 久久久久久久久久久久久久国产 | 国产免费一区二区 | 99精品一区二区三区 | 欧美影院 | 中文字幕在线免费观看 | 国产视频在线一区二区 | 成人在线免费 | 国产日韩欧美 | 孰女乱色一区二区三区 | 日韩精品在线看 | 欧美激情久久久 | 久久婷婷av | 国产精品成人一区二区三区 | 欧美日韩精品一区二区三区视频 | 欧美日韩国产一区二区三区 | 亚洲国产成人精品女人久久久 | 国产精品毛片一区二区在线看 |