定義和用法
reduce() 方法接收一個函數(shù)作為累加器拂封,數(shù)組中的每個值(從左到右)開始縮減,最終計算為一個值。
array.reduce(function(prev, cur, currentIndex, arr), initialValue)
:param function(prev, cur, index, arr) 必需晤斩。用于執(zhí)行每個數(shù)組元素的函數(shù)餐弱。
函數(shù)參數(shù):
prev: 必需宴霸。初始值, 或者計算結(jié)束后的返回值。
cur: 必需膏蚓。當(dāng)前元素
currentIndex: 可選瓢谢。當(dāng)前元素的索引
arr: 可選。當(dāng)前元素所屬的數(shù)組對象驮瞧。
:param initialValue: 可選氓扛。傳遞給函數(shù)的初始值
注意:沒有第二個參數(shù)的時候prev初始值默認(rèn)為數(shù)組的第一項,此時循環(huán)從數(shù)組的第二項開始,有第二個參數(shù)的時候prev為第二個參數(shù)值采郎,此時循環(huán)從數(shù)組的第一項開始千所。
常見應(yīng)用:
1. 求和:
const arr = [15, 19, 10, 14, 26, 8];
const total = arr.reduce((prev, cur) => {
return prev + cur
})
console.log(total)//數(shù)組的和
2. 求平均
const arr = [15, 19, 10, 14, 26, 8];
const avg= arr.reduce((prev, cur, index, array) => {
prev += cur
if( index === array.length-1) {
return prev/array.length;
}else {
return prev;
}
})
3. 求元素出現(xiàn)的次數(shù)
const arr = ['banana', 'cherry', 'orange', 'apple', 'cherry', 'orange', 'apple', 'banana', 'cherry', 'orange', 'fig' ];
const total = arr.reduce((prev, cur) => {
prev[cur] = (prev[cur] || 0) + 1
return prev
}, {})
4. 將二維數(shù)組轉(zhuǎn)換為一維數(shù)組
const data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
const flat = data.reduce((prev, cur) => {
return prev.concat(cur)
}, [])
5. 求數(shù)組最大值
const num = [1, 2, 3, 5, 5, 1]
const max_num = num.reduce((prev, cur) => {
return Math.max(prev, cur)
})