1. 程式人生 > >數組的方法之(Array.prototype.reduce() 方法)

數組的方法之(Array.prototype.reduce() 方法)

回調函數 對數 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() 方法)