数组的方法之(Array.prototype.reduce() 方法)

Posted baoyadong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组的方法之(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]

输出如下:

以上是关于数组的方法之(Array.prototype.reduce() 方法)的主要内容,如果未能解决你的问题,请参考以下文章

《C++ Primer》学习 之 返回数组的引用(返回数组的指针,方法与之相同)

js数组方法之数组变异方法

javasscript学习笔记 之 数组学习二 数组的所有方法

javascript之操作数组方法

Shell 之 数组

Java初学者之方法和数组