码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-04-19 21:55:56      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:ica   reducer   pre   mes   length   ide   strong   flatten   计算   

   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() 方法)

标签:ica   reducer   pre   mes   length   ide   strong   flatten   计算   

原文地址:https://www.cnblogs.com/xuzhudong/p/8886192.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!