for...in、for...of、forEach()有什么區別


本文原鏈接:https://cloud.tencent.com/developer/article/1360074

for of 和 for in 循環

循環遍歷數組的時候,你還在用 for 語句走天下嗎?

我曾經就是 for 走天下,最后發現自己給自己挖了一個巨大的坑,層層嵌套的循環,總要花大量的時間去捋清各種邏輯關系,很容易邏輯混亂。終於你經過千辛萬苦把邏輯捋清了,實現了功能需求。可是這時候接踵而來的問題來了?性能,擴展性,重用性....等等,合着我費了九牛二虎之力白費了。這時候一把鼻涕一把淚,滿是辛酸;

后來就很少很少使用 for 取而代之的是 APIES6 的一些新特性

數組的 for of

一說到循環我們很容易想到 for in,但是我們應該要知道的是 他更適合用來遍歷對象而不是數組,有人說他是為遍歷普通對象而設計的。

理由:

for in 遍歷是隨機的,數組遍歷是按照一定順序的。

for in 遍歷數組索引的時候可能得到的是字符串索引而不是數字索引,而我們希望數組遍歷是數字索引遍歷(除了關聯數組之外)

for ... in循環由於歷史遺留問題,它遍歷的實際上是對象的屬性名稱。一個Array數組實際上也是一個對象,它的每個元素的索引被視為一個屬性。

循環我們也很容易想到 forEach()方法

        array.forEach(callback(currentValue, index, array){ //do something }, this) 復制代碼

參數

callback: 為數組中每個元素執行的函數,該函數接收三個參數:

currentValue(當前值): 數組中正在處理的當前元素。

index(索引): 數組中正在處理的當前元素的索引。

array: forEach()方法正在操作的數組。

thisArg可選:可選參數。當執行回調 函數時用作cthis的值(參考對象)。

返回值:undefined 局限: 不能使用 break 中斷循環,也不能使用 return 語句返回到外層函數

此刻我想像你推薦 for...of 循環,你的不二之選

for of遍歷數組應該是最好的選擇,最簡潔、最直接的遍歷數組元素的語法,可以使用breakcontinuereturn 語句,同時他避開了 for in循環的缺陷

for-of 循環不僅支持數組,還支持大多數類數組對象,for-of 循環也支持字符串遍歷。

我們可以把字符串假象成數組的一種,字符串有的方法數組都有,它同樣支持 MapSet 對象遍歷。簡而言之就是有迭代器方法的都可以用for of循環(如果你還不知道MapSet我們可以開始他們的學習路程了)

再來說一說數組其他遍歷的API

    const new_array = arr.filter(callback[, thisArg]) 復制代碼

callback :用來測試數組的每個元素的函數。調用時使用參數 (element, index, array)。返回 true 表示保留該元素(通過測試),false 則不保留。

thisArg :可選。執行 callback 時的用於 this 的值。

返回值:一個新的通過測試的元素的集合的數組

  • Array.prototype.map(): 創建一個新數組,其結果是該數組中的每個元素都調用一個提供的函數后返回的結果。
    let new_array = arr.map(function callback(currentValue, index, array) { // Return element for new_array }[, thisArg]) 復制代碼

callback : 生成新數組元素的函數,使用三個參數:

currentValue : callback 的第一個參數,數組中正在處理的當前元素。

index :callback 的第二個參數,數組中正在處理的當前元素的索引。

array: callback 的第三個參數,map 方法被調用的數組。

ound: #eee;">thisArg:可選的。執行 callback 函數時 使用的this 值。

  • Array.prototype.every(): 如果數組中的每個元素都滿足測試函數,則返回 true,否則返回 false
  • Array.prototype.some(): 如果數組中至少有一個元素滿足測試函數,則返回 true,否則返回 false


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM