JavaScript 中的?reduce
?方法是一個非常強大的數組方法,它允許你對數組中的所有元素執行一個“reducer”函數,從而將數組“減少”到一個單一的值。以下是?reduce
?方法的詳細介紹:
語法
array.reduce(function(accumulator, currentValue, currentIndex, array) {// ... 執行操作 ...
}, initialValue);
或者使用箭頭函數:
array.reduce((accumulator, currentValue, currentIndex, array) => {// ... 執行操作 ...
}, initialValue);
參數
callback
: 執行數組中每個值 (如果沒有提供?initialValue
?則第一個值除外) 的函數,包含四個參數:accumulator
: 累計器累計回調的返回值; 它是上一次調用回調時返回的值,或者是提供的?initialValue
(如果有提供)。currentValue
: 數組中正在處理的當前元素。currentIndex
(可選): 數組中正在處理的當前元素的索引。如果提供了?initialValue
,則起始索引為 0,否則為 1。array
(可選): 調用?reduce
?的數組。
initialValue
(可選): 用作第一個調用?callback
?函數時的第一個參數的值。如果沒有提供初始值,則將數組中的第一個元素作為累加器的初始值,并且從第二個元素開始迭代。
描述
reduce
?方法對數組中的每個元素執行一個由你提供的“reducer”回調函數(升序執行),將其結果“縮減”為單個返回值。
返回值
函數累計處理的結果。
示例
計算數組所有元素的總和
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 輸出: 15
將數組元素連接成一個字符串
const words = ['Hello', 'World'];
const sentence = words.reduce((accumulator, currentValue) => accumulator + ' ' + currentValue, '');
console.log(sentence); // 輸出: "Hello World"
將二維數組轉換為一維數組
const arrays = [[1, 2, 3], [4, 5], [6]];
const flattenedArray = arrays.reduce((accumulator, currentValue) => accumulator.concat(currentValue), []);
console.log(flattenedArray); // 輸出: [1, 2, 3, 4, 5, 6]
計算對象中屬性的出現次數
const names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
const countedNames = names.reduce((allNames, name) => {if (name in allNames) {allNames[name]++;} else {allNames[name] = 1;}return allNames;
}, {});
console.log(countedNames); // 輸出: { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
注意事項
- 如果數組為空且沒有提供?
initialValue
,reduce
?方法將拋出?TypeError
。 - 如果數組僅有一個元素(無論位置如何)并且沒有提供?
initialValue
,或者如果提供了?initialValue
?但是數組為空,那么將返回唯一值,不調用?callback
。
reduce
?方法是高度靈活的,可以根據需要執行幾乎任何類型的數組元素聚合操作。