reduce函数

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

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

<script>const array1 = [1, 2, 3, 4];const reducer = (accumulator, currentValue) => {console.log(accumulator +'|' + currentValue);return accumulator + currentValue};// 1 + 2 + 3 + 4console.log(array1.reduce(reducer));// 10// 5 + 1 + 2 + 3 + 4console.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]

输出如下:

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

数组的方法之(Array.prototype.reduce() 方法)相关推荐

  1. 理解Array.prototype.reduce()的执行过程

    之前对reduce()一直不理解,今天专门看了一遍MDN文档感觉明白了一些.在此记录一下自己的一些理解. Array.prototype.reduce()方法的作用: 对数组中的每个元素执行一次传入的 ...

  2. 数组的flat方法【Array.prototype.flat()】

    数组的flat方法[Array.prototype.flat()] 一. 概念   flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回. 二 ...

  3. js中Array.prototype.find() 方法在对象数组上无效果,捉急。。。

    我在使用Array.prototype.find() 方法时,发现在对象数组上没有正确返回,过程如下: roleResourceList是个对象数组: 里面的数据是这样的: 调用find()方法: d ...

  4. Array.prototype.reduce 的理解与实现

    Array.prototype.reduce 是 JavaScript 中比较实用的一个函数,但是很多人都没有使用过它,因为 reduce 能做的事情其实 forEach 或者 map 函数也能做,而 ...

  5. java8 stream reduce 方法用法 java stream reduce 方法使用方法

    java8 stream reduce 方法用法 java stream reduce 方法使用方法 一.背景 在使用Stream的reduce方法时,发现该方法有 3个重载方法,分别是: 一个参数. ...

  6. 深入Array.prototype.slice()方法

    "slice"英文是 片 的意思,顾名思义,slice方法是将数组切片,即返回原数组的一部分 slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决 ...

  7. Array.prototype.reduce用法

    定义 reduce() 方法对数组种的每个元素执行一个由您提供的 reducer (升序执行),将其接口汇总为单个返回值. 语法 arr.reduce(callback(accumulator, cu ...

  8. Array.prototype.map() 、 Array.prototype.reduce()、Array.prototype.filter()

    文章目录 1. map 2. reduce 3. filter 1. map   map 函数接收一个回调函数作为参数,然后返回一个数组,这个数组中的每个元素都是调用回调函数后返回的结果.如: fun ...

  9. js数组中filter、map、reduce、find等方法实现的原理

    filter用法和原理实现 filter 过滤,filter()使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组. let arr=[2,4,6,8]; let arr1=arr. ...

最新文章

  1. 批处理之 for/f 详解
  2. mysql 安全扫描_MySQL 安全和监控 - Can't Wait Any Longer - OSCHINA - 中文开源技术交流社区...
  3. Sparkmllib scala逻辑回归
  4. 服务器修改跳转接口,vue-element登录切换到服务器api后 有返回 但是跳转路由报错...
  5. 改变你人生态度的30个关键词
  6. 使用ABBYY FineReader进行自动图像预处理
  7. HTML在前端开发中起到的作用,什么是字符串,web前端开发里起到什么作用
  8. C/C++——从ctime使用到随便测一样冒泡排序和堆排序的效率
  9. 修饰性形容词-big、good、high_35
  10. 计算机科学与技术文理兼收吗,哪些专业是文理兼收的专业?
  11. 测试管理工具QC第一篇-QC安装步骤(史上最详细的图解过程)-第一篇
  12. acm模板 java_java 之acm模板
  13. springboot 项目中控制台打印日志以及每天生成日志文件
  14. 您有新的订单提示音在线试听_iPhone修改微信提示音,支持全部机型,无需越狱...
  15. 华为测试心率软件,华为运动健康如何测心率 华为运动健康测心率方法
  16. S9300系列交换机升级系统版本
  17. java流的试题_Java练习题 - Stream流
  18. 2021-04-1 芯片74LS161使用总结
  19. Ajax基础教程电子版
  20. Linux 压缩文件与命令

热门文章

  1. 设置oracle每行显示字符个数,Oracle一列的多行数据拼成一行显示字符-Oracle
  2. java刚进公司做什么?
  3. 学python入门需要什么基础?
  4. 一篇文章搞懂前端学习方法与构建知识体系,怎么做自己的职业规划
  5. 为什么学习web前端,必须掌握JavaScript这门编程语言
  6. html无需列表怎么打,如何以html无序列表形式而不是xml打印这些结果?
  7. routing zuul_金三银四跳槽季快到了:送上Spring cloud全家桶系列之Zuul
  8. java选择结构二星期几_java4选择结构 二
  9. (四)Qt实现自定义模型基于QAbstractTableModel
  10. 【转】位操作基础篇之位操作全面总结