數組的方法之(Array.prototype.reduce() 方法)
阿新 • • 發佈:2018-04-19
回調函數 對數 for type dex 常見用法 返回值 width bubuko
reduce函數
reduce()
方法對累加器和數組中的每個元素(從左到右)應用一個函數,將其減少為單個值。
對數組中的所有元素調用指定的回調函數。該回調函數的返回值為累積結果,並且此返回值在下一次調用該回調函數時作為參數提供。
<script> const array1 = [1, 2, 3, 4]; const reducer = (accumulator, currentValue) => { console.log(accumulator +‘|‘ + currentValue); return accumulator + currentValue };// 1 + 2 + 3 + 4 console.log(array1.reduce(reducer));// 10 // 5 + 1 + 2 + 3 + 4 console.log(array1.reduce(reducer, 5)); // 15 </script>
輸出如下:
語法:
callback 執行數組中每個值的函數,包含四個參數:
accumulator:
累加器累加回調的返回值; 它是上一次調用回調時返回的累積值,或initialValue
(如下所示)。currentValue:
數組中正在處理的元素。
currentIndex:
initialValue
,則索引號為0,否則為索引為1。array:
可選,調用reduce
的數組。
initialValue:
可選,用作第一個調用 callback
的第一個參數的值。 如果沒有提供初始值,則將使用數組中的第一個元素。 在沒有初始值的空數組上調用 reduce 將報錯。
用法如下:
1.常見用法:
var t = [0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array){ console.log(accumulator+ ‘|‘ + currentValue+ ‘-->‘ + currentIndex + ‘-->‘ + array); return accumulator + currentValue; }); console.log(‘t:‘, t);
輸出如下:
2. 如果你提供一個初始值作為reduce
方法的第二個參數,以下是運行過程及結果:
var t = [0, 1, 2, 3, 4].reduce((accumulator, currentValue, currentIndex, array) => { console.log(accumulator + ‘|‘ + currentValue+ ‘-->‘ + currentIndex + ‘-->‘ + array); return accumulator + currentValue; }, 10 ); console.log(‘t:‘, t);
輸出如下:
3.將二維數組轉化為一維
var flattened = [[0, 1], [2, 3], [4, 5]].reduce( function(a, b) { return a.concat(b); },[]); console.log(flattened);
輸出如下:
4.計算數組中每個元素出現的次數
var names = [‘Alice‘, ‘Bob‘, ‘Tiff‘, ‘Bruce‘, ‘Alice‘]; var countedNames = names.reduce(function (allNames, name) { console.log(allNames, ‘| ‘ + name); if (name in allNames) { allNames[name]++; } else { allNames[name] = 1; } return allNames; }, {}); console.log(countedNames);
輸出如下:
5.數組去重
let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4]; let result = arr.sort().reduce((init, current)=>{ if(init.length===0 || init[init.length-1]!==current){ init.push(current); } return init; }, []); console.log(result); //[1,2,3,4,5]
輸出如下:
數組的方法之(Array.prototype.reduce() 方法)