先看w3c官說
array.reduce(function(total, currentValue, currentIndex, arr), initialValue);
/*
total: 必需。初始值, 或者計算結束后的返回值。
currentValue: 必需。當前元素。
currentIndex: 可選。當前元素的索引;
arr: 可選。當前元素所屬的數組對象。
initialValue: 可選。傳遞給函數的初始值,相當於total的初始值。
*/
在js中常見的用法:
1.數組求和

2.數組最大值

3.進階用法
3.1數組對象中的用法



3.2求字符串中字每個母出現的次數

3.3數組轉數組

3.4數組轉對象



4高級用法
4.1多維的疊加執行操作
<!-- 各科成績占比重不一樣, 求結果 -->
var result = [
{ subject: 'math', score: 88 },
{ subject: 'chinese', score: 95 },
{ subject: 'english', score: 80 }
];
var dis = {
math: 0.5,
chinese: 0.3,
english: 0.2
};
var res = result.reduce((accumulator, cur) => dis[cur.subject] * cur.score + accumulator, 0);
<!-- 加大難度, 商品對應不同國家匯率不同,求總價格 -->
var prices = [{price: 23}, {price: 45}, {price: 56}];
var rates = {
us: '6.5',
eu: '7.5',
};
var initialState = {usTotal:0, euTotal: 0};
var res = prices.reduce((accumulator, cur1) => Object.keys(rates).reduce((prev2, cur2) => {
console.log(accumulator, cur1, prev2, cur2);
accumulator[`${cur2}Total`] += cur1.price * rates[cur2];
return accumulator;
}, {}), initialState);
var manageReducers = function() {
return function(state, item) {
return Object.keys(rates).reduce((nextState, key) => {
state[`${key}Total`] += item.price * rates[key];
return state;
}, {});
}
};
var res1= prices.reduce(manageReducers(), initialState);
4.2扁平一個二維數組(合並成一個數組)

