天天看點

javascript數組周遊的方式及其差別for循環foreachmapreduceeverysome

for循環

  • 使用示例
let array = ['item1','item2'];
let len = array.length;
for(let i=0;i<len;i++){
	console.log(array[i],i) //1 ,2,3,4
}
           

适用場景

:非常靈活的一種方式,可以不必要周遊整個數組,可以根具需求随意跳出循環,但寫法較為繁瑣。

foreach

  • 描述

forEach() 方法按升序為數組中含有效值的每一項執行一次 callback 函數,那些已删除或者未初始化的項将被跳過(例如在稀疏數組上)。

可依次向 callback 函數傳入三個參數:

數組目前項的值

數組目前項的索引

數組對象本身

  • 使用示例
let array = ['item1','item2'];
array.foreach((item,index,originalArray)=>{
	console.log(item) //'item1','item2'
})
           

适用場景

:常用的一種寫法,友善使用,除了抛出異常,沒有辦法打斷周遊

map

  • 描述
map 方法會給原數組中的每個元素都按順序調用一次 callback 函數。callback 每次執行後的傳回值(包括 undefined)組合起來形成一個新數組。 callback 函數隻會在有值的索引上被調用;那些從來沒被賦過值或者使用 delete 删除的索引則不會被調用。
因為map生成一個新數組,當你不打算使用傳回的新數組卻使用map是違背設計初衷的,請用forEach或者for-of替代。你不該使用map: A)你不打算使用傳回的新數組,或/且 B) 你沒有從回調函數中傳回值。

callback 函數會被自動傳入三個參數:數組元素,元素索引,原數組本身。

  • 使用示例
let array = ['item1','item2'];
array.map((item,index,originalArray)=>{
	console.log(item) //'item1','item2'
})
           

适用場景

:傳回一個新的數組

reduce

  • 描述

reduce為數組中的每一個元素依次執行callback函數,不包括數組中被删除或從未被指派的元素,接受四個參數:

accumulator 累計器

currentValue 目前值

currentIndex 目前索引

array 數組

  • 使用示例
var sum = [0, 1, 2, 3].reduce(function (accumulator, currentValue) {
  return accumulator + currentValue;
}, 0);
//sum 6
           

适用場景

:reduce 相當于給函數開辟了一個臨時的變量 我們将需要暫存的資料存儲 傳到下一個循環。有這樣需求的場景下使用較友善。

reduceRight的周遊順序為從右向左

{.is-warning}

every

  • 描述
every 方法為數組中的每個元素執行一次 callback 函數,直到它找到一個會使 callback 傳回 falsy 的元素。如果發現了一個這樣的元素,every 方法将會立即傳回 false。否則,callback 為每一個元素傳回 true,every 就會傳回 true。callback 隻會為那些已經被指派的索引調用。不會為那些被删除或從未被指派的索引調用。

callback 在被調用時可傳入三個參數:元素值,元素的索引,原數組

  • 使用示例
[12, 5, 8, 130, 44].every(x => x >= 10); // false
[12, 54, 18, 130, 44].every(x => x >= 10); // true
           

适用場景

:當需要周遊數組 來判斷是否每個元素都滿足條件的時候非常友善

some

  • 描述

類似于every。every是所有都true才傳回true,some是隻要一個true就傳回true。

繼續閱讀