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

使用方法如下

  1. [1,1,1,1].reduce((total,currentValue,index)=>{
  2.  
  3. },initialValue)

  

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

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

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

index 表示数组下标 可选

下面来看一个例子

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

  

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

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

  

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

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

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

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

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

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

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

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

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

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

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

  1. let arr = [[1,1,1],[2,2,2],[3,3,3]].reduce((pre,current,index)=>{
  2. return pre.concat(current);
  3. },[])
  4. 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. 原生android webview 显示的H5页面颜色属性无法识别 - 具体解决心得

    1.前言 background-color: #fc1717bf; 这个样式属性没毛病吧,浏览器都是支持的,但是在android 7.0 系统无法正确识别这个含有透明度的属性, 即bf无法识别,将默认 ...

  2. 通过js触发launch事件获取页面信息

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6814776265602499080/ 承接上一篇文档<页面Cookie的JS文件编写> 思路 继续之前 ...

  3. 包装类integer的常用方法

    三种类型互转 (一): String 转换成 int 类型  调用 八大封装类 parseInt方法 结果可见 输出了223 成功转型 (二): int 转换成 String:  调用String类的 ...

  4. SYCOJ906瑞士轮

    题目-瑞士轮 (shiyancang.cn) 模拟题 #include<bits/stdc++.h> using namespace std; const int N=1e5+520; i ...

  5. Git创建分支进行开发

    一.业务场景 自己当前开发的项目算是一个中型项目,整个项目都是由自己一个人开发完成,主要有两个子项目,一个是小程序的后台,一个是小程序的后台管理系统. 因为从一开始就只有我一个人在进行开发,所以自己平 ...

  6. 【Java】方法

    文章目录 何谓方法 方法的定义 方法调用 方法重载 命令行传参 可变参数 递归 何谓方法 System.out.println(),是什么 Java方法是语句的集合,它们在一起执行一个功能 方法是解决 ...

  7. mysql数据库优化1

    目录 数据库结构的设计优化 1.数据库结构的设计 2.针对大型的数据量提前进行分库和分表 3.分库分表带来的问题 4.表结构设计注意的问题 查询优化 1.查询语句的注意事项 2.应尽量避免在 wher ...

  8. RBAC: K8s基于角色的权限控制

    文章目录 RBAC: K8s基于角色的权限控制 ServiceAccount.Role.RoleBinding Step 1:创建一个ServiceAccount,指定namespace Step 2 ...

  9. Cesium源码剖析---视频投影

    Cesium中的视频投影是指将视频作为一种物体材质,实现在物体上播放视频的效果.这个功能在Cesium早期版本中就支持了,在Code Example中有一个示例.今天就来分析一下其内部实现原理. 1. ...

  10. gin中只绑定url查询字符串

    package main import ( "github.com/gin-gonic/gin" "log" ) type Person struct{ Nam ...