js中reduce()的牛掰所在 本質作用:實現數值累計,篩選過濾,類似遞歸


 

先看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扁平一個二維數組(合並成一個數組)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM