reduce 是es6 新增的数组操作方法 意为累加器

使用方法如下

[1,1,1,1].reduce((total,currentValue,index)=>{

},initialValue)

  

initialValue 代表的是累加器的初始值 必填

total的值在初始情况下等于initialValue 用来接收返回的结果 必填

currentValue 代表数组中的每一项 必填

index 表示数组下标 可选

下面来看一个例子

 let total = [2,2,2].reduce((pre,current,index)=>{
console.log(pre,index);
return pre+current;
},2)
console.log(total);//输出8

  

我们输出total 会发现它等于8 ,这里初始值是2,这就是将初始值与数组中的每一项进行累加的结果 也就是说,它是受初始值的影响,若我们将初始值改变累加器的结果也会不同

 let total = [2,2,2].reduce((pre,current,index)=>{
console.log(pre,index);
return pre+current;
},1)
console.log(total);//输出7
点击并拖拽以移动

  

在上面这个例子里 current就等于数组中的每一项,index等于数组的下标,而pre表示的就是默认的初始值,但是这个值并不是一成不变的 每次累加后它的结果都会改变

默认情况下pre等于 2 ,这个值是我们定义的初始值

第一次 return pre+current, 等于4 ,然后将这个4返回给pre 所以这个时候pre不在是2 而是等于4

第二次 return pre+current, 因为在上一轮累加后pre已经等于4,所以这一次累加后pre等于6 了 然后以此类推

直到计算到数组最后一个值时 ,在将结果返回给累加器方法

也就是说 pre的值会随着每次累加而改变

我们可以在累加器里面打印一下pre 就能看出效果

 let total = [2,2,2].reduce((pre,current,index)=>{
console.log(pre);//分别输出2 4 6
return pre+current;
},2)
console.log(total);//输出8

会分别输出2,4,6,没有输出8,这是因为计算到数组最后一个值时,会直接将结果返回给累加器方法,结束运算

这里需要注意 累加器的初始值不一定要是一个数字 可以是其他任何类型的数据,可以是一个数组,或是一个字符串都行,它不仅仅可以用来累加数值,还很多其他用法,

比如说我们还可以利用累加器的特性来将二维数组转换为一维数组

        let arr = [[1,1,1],[2,2,2],[3,3,3]].reduce((pre,current,index)=>{
return pre.concat(current);
},[])
console.log(arr);

转换后的数组将会是一个一维数组

[1, 1, 1, 2, 2, 2, 3, 3, 3]

注:concat是数组拼接方法 可以将多个数组重新组合为一个新的数组

累加器的功能远不止这些,这里不多做赘述

js reduce累加器的更多相关文章

  1. how to remove duplicates of an array by using js reduce function

    how to remove duplicates of an array by using js reduce function ??? arr = ["a", ["b& ...

  2. js的reduce累加器

    reduce为数组中每一个元素执行回调函数,不包括被删除或未被赋值的 https://www.jianshu.com/p/e375ba1cfc47

  3. JS reduce()方法详解,使用reduce数组去重

     壹 ❀ 引 稍微有了解JavaScript数组API的同学,对于reduce方法至少有过一面之缘,也许是for与forEach太强大,或者filter,find很实用,在实际开发中我至始至终没使用过 ...

  4. js reduce()方法使用

    reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值. reduce() 可以作为一个高阶函数,用于函数的 compose. 注意: reduce() 对 ...

  5. JS --- reduce()函数

    定义: reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值.对空数组是不会执行回调函数的. 案例 计算数组总和 var num = [1,2,3,4,5 ...

  6. js reduce用法

    let books = [ 0, {bookName:"python",price:10,count:1}, {bookName:"Ruby",count:2, ...

  7. js reduce

    数组对象求和 let books = [ { id: 100, name: '红楼梦', price: 100 }, { id: 101, name: '西游记', price: 150 }, { i ...

  8. js reduce数组转对象

    借鉴:https://juejin.im/post/5cfcaa7ae51d45109b01b161#comment这位大佬的处理方法很妙,但是我一眼看过去没有明白,细细琢磨了下,终于明白了 1 co ...

  9. js arguments 和 reduce求和

    1.js arguments arguments 是一个对应于传递给函数的参数的类数组对象 function sum(){ ; ; i < arguments.length; i++){ sum ...

随机推荐

  1. vue爬坑之路(webpack 配置篇)

    在vue cli下 1.npm run dev 打开浏览器在config的index.js中修改autoOpenBrowser为true 关闭sourcemap productionSourceMap ...

  2. vue2.0点击其他任何地方隐藏dom

    methods: { handleBodyClick(){ if (绿色区域出来了,要判断点击其他地方就要关闭,这样可以避免绿色区域已经关闭还在操作) { let _con = $(目标区域) if ...

  3. javax.el.PropertyNotFoundException: 类型[xx.xxx.xxxx]上找不到属性[xxxx]

    今天在JSP利用EL表达式取值报了 "javax.el.PropertyNotFoundException" 1 Caused by: org.apache.jasper.Jasp ...

  4. 《剑指offer》面试题18. 删除链表的节点

    问题描述 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = ...

  5. 《剑指offer》面试题25. 合并两个排序的链表

    问题描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2-> ...

  6. 三张图秒懂Redis集群设计原理

    转载Redis Cluster原理 转载https://blog.csdn.net/yejingtao703/article/details/78484151 redis集群部署方式: 单机 主从 r ...

  7. 原子操作atomic解读

    下面从一个问题引入: // ConsoleApplication5.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include<ran ...

  8. java继承成员函数特点

    1 //成员函数. 2 /* 3 * 当子父类中出现成员函数一模一样的情况,会运行子类的函数. 4 * 这种现象,称为覆盖操作.这时函数在子父类中的特性. 5 * 函数两个特征: 6 * 1,重载. ...

  9. IoC容器-Bean管理XML方式(注入外部bean)

    注入属性-外部bean (1)创建两个类service类和dao类 (2)在service调用dao里面的方法 (3)在spring配置文件中进行配置

  10. libevent网络库

    1.概述 libevent是一个C语言编写的.轻量级开源高性能事件通知库.作为底层网络库,已经被广泛应用(如:memcached.Vomit.Nylon.Netchat等).主要有以下几个亮点: 事件 ...