详解arr.reduce()方法

news/2024/10/30 9:01:29/

reduce() 是 ECMAScript 5 (ES5)中新增的数组方法。
可以用于求数组中所有元素的和、求数组中所有元素的乘积、找到数组中的最大值或最小值、将二维数组转为一维数组、将数组中的元素合并成一个字符串、对数组中的对象进行分组或排序等操作。

1、语法

arr.reduce(callback, [initialValue])

其中回调函数callback有四个参数:
1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue (数组中当前被处理的元素)
3、index (当前元素在数组中的索引)
4、array (调用 reduce 的数组)

如果没有提供initialValue,reduce会从索引1的地方开始执行callback方法,跳过第一个索引。如果提供initialValue,从索引0开始。
例如:

//无初始值initialValue
const arr = [1, 2, 3, 4];
const sum = arr.reduce((prev, cur, index, arr) => {console.log(prev, cur, index);return prev + cur;
})
console.log(arr, sum);//打印结果:
//1 2 1
//3 3 2
//6 4 3
//[1, 2, 3, 4] 10
//有初始值initialValue
const arr = [1, 2, 3, 4];
const sum = arr.reduce((prev, cur, index, arr) => {console.log(prev, cur, index);return prev + cur;
}0) //注意这里设置了初始值
console.log(arr, sum);//打印结果:
//0 1 0
//1 2 1
//3 3 2
//6 4 3
//[1, 2, 3, 4] 10

2、利用reduce() 进行数组求和,求乘积

const arr = [1, 2, 3, 4];
const sum = arr.reduce((x,y) => x+y)
const mul = arr.reduce((x,y) => x*y)
console.log( sum ); //求和,10
console.log( mul ); //求乘积,24

3、利用reduce()统计数组中每个元素出现的次数

const names = ['A', 'B', 'C', 'D', 'A'];const nameNum = names.reduce((pre,cur) => {if(cur in pre) {pre[cur]++} else {pre[cur] = 1 }return pre
},{})
console.log(nameNum); //{A: 2, B: 1, C: 1, D: 1}

4、利用reduce() 进行数组去重

let hash = {};function unique(arr, initialValue){return arr.reduce(function(previousValue, currentValue, index, array){hash[currentValue.name] ? '' : hash[currentValue.name] = true && previousValue.push(currentValue);return previousValue}, initialValue);
}const uniqueArr = unique([{name: 'zs', age: 15}, {name: 'lisi'}, {name: 'zs'}], []);console.log(uniqueArr); // uniqueArr.length == 2

5、利用reduce() 进行数组降维

const arr = [[0, 1], [2, 3], [4, 5]]
const newArr = arr.reduce((pre,cur) => {return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]

6、利用reduce() 进行对象的属性求和

const result = [{subject: '语文',score: 90},{subject: '数学',score: 90},{subject: '英语',score: 100}
];const sum = result.reduce((prev, cur) => {return cur.score + prev;
}, 0);
console.log(sum) //280

http://www.ppmy.cn/news/280444.html

相关文章

Android Studio实现五子棋小游戏

项目目录 一、项目概述二、开发环境三、详细设计1、布局设计2、验证码3、AI人机4、背景音乐 四、运行演示五、项目总结 一、项目概述 五子棋是一种两人对弈的策略型棋类游戏,本次五子棋小游戏具有人机对战和人人对战两种玩法。人机对战可以单人挑战AI,实…

freeswitch透传带SDP的180

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 freeswitch对于180/183的消息处理有默认的规则,但是在3GPP的标准中,消息流程会更加复杂,场景更多变。 这样就需要我们根据实际环境中的场景定制消息流程。 本文只讨论带SDP的183/18…

苹果计算机怎样恢复桌面,mac桌面整理_使Mac桌面恢复整洁的四种技巧

摘要 腾兴网为您分享:使Mac桌面恢复整洁的四种技巧,智慧大学,湘税社保,完美志愿,双福汇等软件知识,以及ustar,录音机,东莞干部培训,小黑屋软件,洋葱数学app,发…

html5中怎么设置音频的位置,HTML5中音频的详细解析

摘要 腾兴网为您分享:HTML5中音频的详细解析,智慧医疗,榛果民宿,猿辅导,优酷等软件知识,以及虚拟视频,天正建筑tarch8.5,跟谁学登录,照片回收站,医学生简历模板&#xff…

ADAudit Plus:保护企业信息安全的强大内部审计解决方案

内部安全审计在现代企业中扮演着至关重要的角色。它是确保组织网络和系统安全的关键步骤,帮助企业发现和解决潜在的安全风险和漏洞。在这个信息技术高度发达的时代,保护企业的敏感数据和防范内部和外部威胁变得尤为重要。 内部安全审计 ADAudit Plus是一…

数据仓库基础知识

数据仓库 企业信息应用现状企业对应用集成的需求1. 什么是BI1.1 BI的定义1.2 BI要做的事情1.3 BI的智能1.4 BI应用架构1.5 BI系统架构1.6 BI应用带来的关键效益 2. 什么是数据仓库2.1 数据仓库的概念2.2 数据仓库的特性 3. 数据仓库设计中的几个重要概念3.1 ETL3.2 数据集市&am…

远程桌面无法复制文件

1.任务管理停止运行 rdpclip.exe 2.运行 输入 rdpclip.exe 在次复制便可以成功.

部署DR模式 LVS负载均衡群集

部署DR模式 LVS负载均衡群集 一、LVS-DR数据包流向分析二、DR模型的特点三、DR模式 LVS负载均衡群集部署 一、LVS-DR数据包流向分析 (1)客户端发送请求到 Director Server(负载均衡器),请求的数据报文(源 …