博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组的方法之(Array.prototype.reduce() 方法)
阅读量:5157 次
发布时间:2019-06-13

本文共 1899 字,大约阅读时间需要 6 分钟。

   reduce函数

reduce() 方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。

对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。

输出如下:

语法:

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]

输出如下:

转载于:https://www.cnblogs.com/xuzhudong/p/8886192.html

你可能感兴趣的文章
江城子·己亥年戊辰月丁丑日话凄凉
查看>>
IP V4 和 IP V6 初识
查看>>
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>
『Raid 平面最近点对』
查看>>
【ADO.NET基础-数据加密】第一篇(加密解密篇)
查看>>
C语言基础小结(一)
查看>>
STL中的优先级队列priority_queue
查看>>
UE4 使用UGM制作血条
查看>>
浏览器对属性兼容性支持力度查询网址
查看>>
OO学习总结与体会
查看>>
虚拟机长时间不关造成的问题
查看>>
校门外的树2 contest 树状数组练习 T4
查看>>
面试整理:Python基础
查看>>
Python核心编程——多线程threading和队列
查看>>
Program exited with code **** 相关解释
查看>>
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>
投标项目的脚本练习2
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>