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


   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);
      }
/*
注意:使用push的話,必須return 這個變量init,如果return init.push()的話會報錯;
使用concat不存在這個問題,可以直接return a.concat(b);
*/ 
return init; }, []); console.log(result); //[1,2,3,4,5]

輸出如下:


免責聲明!

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



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