JS中數組的迭代方法forEach、map、filter、reduce、every、some
在日常處理JS的數組過程中, 我們通常是採用for迴圈的方式來實作. 以下總結一些常用的for迴圈之外的陣列迭代方法.
forEach (迴圈)
讓陣列的每一項分別去做一件事情
let a = [1,2,3]; a.forEach(function(value,i){ console.log("第" + (i + 1) + "项 :" + value) }) // 第1项 :1 // 第2项 :2 // 第3项 :3
map (映射)
跟forEach功能類似, 但是map有回傳值,產生一個新的數組,不改變原來數組
let a = [1,2,3]; a.map(function(value,i){ return value * 2 }) // 第1项 :2 // 第2项 :4 // 第3项 :6
map與forEach的比較:
// 没有返回值的forEach: let a = [1, 2, 3]; a = a.forEach(function (value, i) { return value * 2 // undefine }) // 有返回值的map: let b = [1, 2, 3]; b = b.map(function (value, i) { return value * 2 // [2,4,6] })
可能遇到的坑: map處理完的資料之間多了逗號分隔符號
原因: map遍歷後還是個數組,數組元素之間逗號分隔,插入到DOM時只是呼叫了toString而已,數組元素之間逗號分隔符一起帶進去了,map遍歷後直接把其連接成字串就沒這個問題了
處理辦法: map後面跟上.join('')
reduce (累計)
#reduce() 方法接收一個函數作為累加器,數組中的每個值(從左到右)開始縮減,最終計算為一個值。
reduce() 可以作為一個高階函數,用於函數的 compose。
注意: reduce() 對於空數組是不會執行回呼函數的。
前項與後項做計算
let a = [1, 2, 3]; a = a.reduce(function (prev, next) { return prev + next // 1+2+3 = 6 })
filter (過濾)
過濾掉不符合條件的值, 傳回新數組
let a = [1, 2, 3]; a = a.filter(function (value, i) { return value > 2 }) console.log(a) // 3
every (全部)
判斷每一個元素是否全部滿足條件, 有的話回傳true, 否則false
let a = [1, 2, 3]; a = a.every(function (value, i) { return value > 2 }) console.log(a) // false
# some (任意)
判斷每個元素是否有任意一個滿足條件, 有的話回傳true, 否則false
let a = [1, 2, 3]; a = a.every(function (value, i) { return value > 2 }) console.log(a) // true
推薦教程:《JS教程》
以上是JS中數組的迭代方法:filter、reduce、every、some的詳細內容。更多資訊請關注PHP中文網其他相關文章!