arr.reduce()方法接受一个函数作为累加器,数组中的每个值从左到右开始缩减,最终为一个值。

reduce接受的参数主要有callback(回调函数)和可选参数initvalue(作为第一次调用callback的第一个参数,不传默认数组的第一个元素):

callback回调函数里又接受四个参数分别是:

previousValue(上一次调用回调函数返回的值,或者是提供的初始值(initValue))

currentValue(数组中当前被处理的元素)

index(当前元素在数组中的索引)

array(调用reduce的数组)

简单应用:

1.求和

var total=[0,1,2,3].reduce((acc,cur)=>acc+cur,0)
//total 6

2.将二维数组转化为一维

var arr1=[
[0,1],
[2,3],
[4,5],
].reduce((acc,cur)=>acc.concat(cur),[])
//arr1 [0,1,2,3,4,5]

3.计算数组中每个元素出现的次数

var names=['Alice','Bob','Tiff','Bruce','Alice'];
var count=names.reduce(function(allNames,name){
console.log(allNames)
if(name in allNames){
allNames[name]++;
}else{
allNames[name]=1;
}
return allNames;
},{})
//count is {Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}

4.数组去重

var arr=[1,2,1,2,3,5,4,5,3,4,4,1,6];
let result=arr.sort().reduce((init,current)=>{
if(init.length===0 || init[init.length-1]!==current){
init.push(current);
}
return init;
},[]);
//result is [1,2,3,4,5,6]

功能强大的js数组方法:reduce的更多相关文章

  1. 几个关于js数组方法reduce的经典片段

    以下是个人在工作中收藏总结的一些关于javascript数组方法reduce的相关代码片段,后续遇到其他使用这个函数的场景,将会陆续添加,这里作为备忘. javascript数组那么多方法,为什么我要 ...

  2. 转载收藏(js数组方法大全)

    js数组方法大全 JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组var arr2 = new Arra ...

  3. js数组方法详解

    Array对象的方法-25个 /*js数组方法详解 */ /* * 1 concat() 用于连接多个数组或者值-------------- * 2 copyWithin() 方法用于从数组的指定位置 ...

  4. js数组方法大全(上)

    # js数组方法大全(上) 记录一下整理的js数组方法,免得每次要找方法都找不到.图片有点多,注意流量,嘻嘻! 本期分享 join() reverse() sort() concat() slice( ...

  5. js数组方法大全(下)

    # js数组方法大全(下) 记录一下整理的js数组方法,免得每次要找方法都找不到.图片有点多,注意流量,嘻嘻! 本期分享 forEach() map() filer() every() some() ...

  6. js 数组方法比较

    js 数组方法比较 table th:first-of-type { width: 80px; } table th:nth-of-type(2) { width: 120px; } table th ...

  7. js数组方法大全

    JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组var arr2 = new Array(20); // ...

  8. js数组方法详解(最新最全)

    数组是js中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响.本文所有的栗子都是在es7环境下测试的,如果有问题欢迎留言交流 ...

  9. js数组方法解析

    js 数组有很多方法,其中有的常用,有的不常用,归纳几个常用的方法,做个总结: 1. 转换方法: 1.1 valueOf():调用这个方法会返回数组本身 <script> var arr ...

随机推荐

  1. 【CPU微架构设计】利用Verilog设计基于饱和计数器和BTB的分支预测器

    在基于流水线(pipeline)的微处理器中,分支预测单元(Branch Predictor Unit)是一个重要的功能部件,它负责收集和分析分支/跳转指令的执行结果,当处理后续分支/跳转指令时,BP ...

  2. mybatis出现无效的列类型

    package com.webapp.hanqi.test; import java.util.Date; import org.junit.jupiter.api.AfterEach; import ...

  3. poj2182(线段树求序列第k小)

    题目链接:https://vjudge.net/problem/POJ-2182 题意:有n头牛,从1..n编号,乱序排成一列,给出第2..n个牛其前面有多少比它编号小的个数,记为a[i],求该序列的 ...

  4. webpack4.0

    1. webpack 刚开始是js的模块打包,现在是一个任何模块打包工具  可以识别 CommonJS引入规范     CMD AMD 2. commonJS:  module.exports   r ...

  5. laravel项目安装与重要目录文件说明(一)

    一.laravel创建项目的二种方式: 1.通过laravel安装器,进行创建 composer global require laravel/installer laravel new 项目名 co ...

  6. MSSQL死锁进程查看及关闭

    select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran ...

  7. linux 网络虚拟化: network namespace 简介

    linux 网络虚拟化: network namespace 简介 network namespace 是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息.不管是虚拟机还是 ...

  8. canvas的使用方法

    了解canvas:canvas标签是用作图形绘制,但是通过js脚本来实现的,canvas标签其实只是一个容器 ,最终实现绘制功能肯定是通过js脚本实现. 首先肯定要定义一个canvas标签当做容器 & ...

  9. github node.js

    #安装githubyum install git -y #下载nvmgit clone git://github.com/creationix/nvm.git ~/nvm #设置nvm 自动运行;ec ...

  10. koa 学习1

    1.搭建环境; npm init -f 2.出现错误 npm ERR!Windows_NT 6.1.7601   解决方法: npm config set proxy null npm install ...