数组 reduce 方法使用记录

news2024/11/24 11:53:13

概述      

  reduce()方法对数组中每个元素执行一次 reduce()函数 —升序执行,将其结果汇总为单个返回值。

        reduce方法可做的事情特别多,就是训话遍历能做的,reduce都可以做,比如:数组求和,数组求积、数组中元素出现的次数、数组去重等。

语法

arr.reduce( (prev, cur, index, arr)=>{
    ……
}, int)

参数:

        prev,必需。累计器累计回调的返回值;表示上一次调用回调函数时的返回值,或者初始值init;

        cur,必需。表示当前正在处理的数组元素。

        index,可选。表示当前正在处理的数组元素的索引,若提供init值,则其实索引从0开始,否则起始索引为1.

        arr,可选。表示原数组。

        init,可选,表示初始值。

举例

        没有设置函数的初始迭代值

const arr = [1,2,3,4,5]
const sum = arr.reduce((prev,cur,arr,index)=>{
    console.log(prev, cur, index)
    return prev + cur
})
console.log('arr : ', arr,  "sum : ", sum)

运行结果

         分析:在这里reduce 的作用就是对这个数组进行求和,迭代了4次,函数迭代的初始值是1,也就是默认值(数值的第一项),prev的值是每次计算后的值。

        设置函数的初始迭代值

const arr = [1,2,3,4,5]
const sum = arr.reduce((prev,cur,arr,index)=>{
    console.log(prev, cur, index)
    return prev + cur
},5)
console.log('arr : ', arr,  "sum : ", sum)

运行结果

         分析:这里添加了一个初始值的迭代值,也就是让prev从5开始计算(以5为初始值求和),可以看到,这里迭代了5次,结果也加上了初始值。

reduce 的应用

        数组求和

let arr = [1,2,3,4,5]
console.log(arr.reduce((a, b)=> a+b))   // 15
console.log(arr.reduce((a, b)=> a*b))   // 120

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

var names = ['a', 'b', 'c', 'a', 'a', 'b']
var countedNames = names.reduce( (allNames, name )=>{
    // console.log(allNames, name)
    if(name in allNames){
        allNames[name] ++;
    }
    else{
        allNames[name] = 1
    }
    return allNames
}, {})
console.log(countedNames)

运行结果

去除数组中重复的元素

var names = ['a', 'b', 'c', 'a', 'a', 'b']
var countedNames = names.reduce( (allNames, name )=>{
     console.log(allNames, name)
    if(allNames.indexOf(name) === -1){
        allNames.push(name);
    }
    return allNames
}, [])
console.log(countedNames)

运行结果

 按属性对Object分类

var person = [
    {
        name: 'xiaoming',
        age: 18
    },{
        name: 'xiaohong',
        age: 17
    },{
        name: 'xiaogang',
        age: 17
    }
];
function groupBy(objectArray, property) {
  return objectArray.reduce(function (acc, obj) {
    var key = obj[property];
    if (!acc[key]) {
      acc[key] = [];
    }
    acc[key].push(obj);
    return acc;
  }, {});
}
var groupedPerson = groupBy(person, 'age');
console.log(groupedPerson);

 运行结果

 对对象的属性求和

let people = [
  { name: 'Alice', age: 21 },
  { name: 'Max', age: 20 },
  { name: 'Jane', age: 20 }
];
let result = people.reduce((a,b) =>{
    a = a + b.age;
    return a;
},0)

console.log(result) // - 结果:61

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue基础快速入门

目录 1.vue基础 1.1vue项目创建 1.2 el挂载 1.3.data数据对象 2.本地应用 2.1.内容绑定,事件绑定 v-text ​v-html 传递自定义参数,事件修饰符 总结: 结合使用:计数器 2.2.显示切换,属性绑定 v-show v…

【笔记】计算机组成原理复习重点——篇一

计算机组成原理复习重点笔记 计算机组成原理计算机体系结构 学科基础必修课 研究生入学考试全国联考45分,占比30% 64学时,4学分,上课56,实验8 教材:计算机组成原理(第二版 ) 唐朔飞 高等教育出版社 目录(已…

快速创建servlet(doGet和doPost)

目录 前言必读 一、概述 一、创建方式 1.在需要创建的包下进行创建 2.自定义类名--->类这里添加一个类名(和上面的名称一样名字) ------>勾选创建并确定 3.创建完成代码 4.删掉多余的 二、升级生成的模板 1.点击文件--设置里面 2.在编…

Simulink| “双碳”背景下汽车减少碳排放建模与仿真

目录 一、概述 二、模型 三、Simulink模型 四、matlab代码 一、概述 温室气体的过量排放会增强温室效应,造成全球极端气候的出现,严重影响人类的生存与发展,因此,控制温室气体减排已成为当前环保的重点。根据联合国政府间气…

Linux系统搭建redis-cluster集群案例

Linux系统搭建redis-cluster集群案例(一)redis下载及安装【1】前言介绍【2】redis下载以及安装(1)首先要进入Linux系统的根目录(2)安装redis所需的环境(3)下载redis源码包&#xff0…

k8s 中部署kafka集群

由于开发过程中使用到了kafka,又不想自己部署kafka,索性采用k8s 部署kafka集群,以求做到随时插拔。 创建命名空间 apiVersion: v1 kind: Namespace metadata:name: "kafka"labels:name: "kafka"sudo kubectl apply -f …

linux篇【12】:计算机网络——tcp

目录 一.TCP套接字接口 1.inet_aton (和inet_addr一样,换一种方式而已) 2.listen——把套接字设置为监听状态 3.服务器获取客户端的连接 accept 返回值中套接字和参数中套接字的作用: 4.用到的部分函数 (1&…

技术分享 | MySQL 多版本并发控制「MVCC」

作者:贲绍华 爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一、MySQL InnoD…

TaxiBGC ——分类学指导下的生物合成基因簇鉴定流程

谷禾健康 当前合成基因簇预测限制较大 微生物基因组中的生物合成基因簇 (BGC) 编码具有生物活性的次级代谢物 (SM),它可以在微生物-微生物和宿主-微生物相互作用中发挥重要作用。 鉴于次级代谢物的生物学意义和当前对微生物组代谢功能的深刻兴趣,从高通…

通过 ffmpeg 串流对接 OBS 等直播软件

我们要将设备通过私有通道输出到 H264 流,传给 OBS 等直播软件使用。为此,设计了上图所示的串流工具。 设计思路 私有通道通过 API 接口提供 H264 流,要传给 ffmpeg ,最简单的方法是通过进程间管道传输数据。这里 Dump 工具直接…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java美丽华驾校信息管理系统t93d7

毕业设计也不需要做多高端的程序,毕业设计对于大多数同学来说,为什么感觉到难,最重要的一个原因,那就是理论课到实践课的转变,很多人一下不适应,本能开始拒绝,如果是一个考试,大家都…

使用自定义函数实现数据编解码、格式处理与业务告警

背景 在物联网平台的设备数据接入场景中,开发者总是希望平台接入的设备数据格式标准统一,以便对数据进行统一处理。在实际情况中,由于业务需要,平台常常会面对不同类型、不同厂商的设备接入。即使设备接入协议已经统一使用 MQTT …

傻白探索Chiplet,Chiplet技术带来的“新四化”(三)

目录 一、IP芯片化 二、异质集成(HeteroMaterial Integration) 三、异构集成(HeteroStructure Integration) 四、IO增量化 五、总结 一、IP芯片化 IP(Intelligent Property)是具有知识产权核的集成电…

腾讯前端常考vue面试题(必备)

虚拟DOM的优劣如何? 优点: 保证性能下限: 虚拟DOM可以经过diff找出最小差异,然后批量进行patch,这种操作虽然比不上手动优化,但是比起粗暴的DOM操作性能要好很多,因此虚拟DOM可以保证性能下限无需手动操作DOM: 虚拟DOM的diff和patch都是在一次更新中自动进行的,我们无需手动…

driftingblues2靶机(nmap提权)

环境准备 靶机链接:百度网盘 请输入提取码 提取码:9qkq 虚拟机网络链接模式:桥接模式 攻击机系统:kali linux 2021.1 信息收集 1.探测目标靶机 2.探测目标靶机开放端口和服务 3.用dirsearch扫描目录 dirsearch -u 192.168.…

π120E31兼容Si8620EC-B-IS 双通道数字隔离器

π120E31兼容Si8620EC-B-IS 双通道数字隔离器。具有出色的性能特征和可靠性,整体性能优于光耦和基于其他原理的数字隔离器产品。 传输通道间彼此独立,可实现多种传输方向的配置,可实现3.0kVrms隔离耐压等级和 DC 到 600Mbps 信号传输。该系列…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园兼职招聘系统x6u36

毕业设计说实话没有想象当中的那么难,导师也不会说刻意就让你毕设不通过,不让你毕业啥的,你只要不是太过于离谱的,都能通过的。首先你得要对你在大学期间所学到的哪方面比较熟悉,语言比如JAVA、PHP等这些,数…

腾讯会议一直显示正在加入会议如何处理?

我们在使用腾讯会议时,一直显示正在加入会议,但是经过很长时间也没有反应,这该怎么办?下面小编就给大家带来了相关的解决办法,说不定有用。 腾讯会议一直显示正在加入会议怎么办? 1、手机上打开腾讯会议。 …

交易所步入「后FTX 时代」,WEEX唯客等后发新秀拉开补位战?

太阳底下没有新鲜事,11月上旬 FTX此轮的骤然崩溃,再次证明了加密行业没有「大而不能倒」的神话,也在一定程度上引爆了加密行业的信任危机与流动性困境。 但把盖子掀开、暴露出里面的风险,未尝不是一件好事——缺乏风控合规的中心…

【剧前爆米花--爪哇岛寻宝】面向对象的三大特性——封装、继承以及多态的详细剖析(下——封装)。

作者:困了电视剧 专栏:《JavaSE语法与底层详解》 文章分布:这是一篇关于Java面向对象三大特性——封装的文章,在本篇文章中我会分享封装的一些基础概念以及实现。 目录 封装定义和优点 访问限定符实现封装 private限定符 priv…