Reduce函数

Reduce函数:

概念表述reduce()方法是一个迭代方法对数组中的每个元素按序执行一个提供的 reducer 函数,每一次运行 reducer函数体会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。用于累积运算。 执行机制:每一个值执行一次循环体,且每次执行都是独立的(sum也是独立的)

基本语法:数组名.reduce((sum,current,index)=>{ sum + current; return; },0) sum为累加器,reduce方法会遍历数组中的每一项,所以current是当前值,相当于forEach方法item即每一项,index为索引(可选),最后的0为一个初始值,头一次会赋值给sum开始计算。注意:一定要return值作为下一次sum的初始值。

案例1:累加和
 let arr = [1, 2, 3, 4, 5]let s = arr.reduce((sum, current, index) => {sum + currentreturn sum}, 0)console.info(s)
案例2:对象数组的累加和
let arr = [{name: 'jack',count: 10},{name: 'rose',count: 20}]let s = arr.reduce((sum, current, index) => {sum + current.countreturn sum}, 0);console.info(s)
案例3:对象的分组求和
        let arr = [{name: 'jack',course: '政治',count: 100},{name: 'jack',course: '历史',count: 100},{name: 'jack',course: '地理',count: 100},{name: 'rose',course: '政治',count: 50},{name: 'rose',course: '历史',count: 50},{name: 'rose',course: '地理',count: 50}]//reducelet s2 = arr.reduce((obj, current, index) => {let name = current.namelet count = current.count// 获得obj对应名称值  {'jack':100}  100let oldCount = obj[name]
// oldCount 如果是 undefined,表示此名称第一次出现  ,因为初始值是空对象,所以第一个累加器值为undefined,布尔false,让他等于100if (oldCount) {obj[name] = oldCount + count} else {//第一次赋值obj[name] = count}console.info(`之前累加值:${oldCount},当前值:${count},最终结果:${JSON.stringify(obj)}`)return obj  //return给下一次循环函数独立体}, {})console.info(s2)
代码执行过程及输出:
  1. 初始状态obj 是一个空对象 {}

  2. 第一轮迭代

    • current 是 {name: 'jack', course: '政治', count: 100}
    • name 是 'jack'count 是 100
    • oldCount 是 undefined(因为 obj['jack'] 不存在)。
    • 将 obj['jack'] 设置为 100
    • 输出:之前累加值:undefined, 当前值:100,最终结果:{"jack":100}
  3. 第二轮迭代

    • current 是 {name: 'jack', course: '历史', count: 100}
    • name 是 'jack'count 是 100
    • oldCount 是 100(因为 obj['jack'] 存在且为 100)。
    • 将 obj['jack'] 更新为 200
    • 输出:之前累加值:100, 当前值:100,最终结果:{"jack":200}
  4. 第三轮迭代

    • current 是 {name: 'jack', course: '地理', count: 100}
    • name 是 'jack'count 是 100
    • oldCount 是 200(因为 obj['jack'] 存在且为 200)。
    • 将 obj['jack'] 更新为 300
    • 输出:之前累加值:200, 当前值:100,最终结果:{"jack":300}
  5. 第四轮迭代

    • current 是 {name: 'rose', course: '政治', count: 50}
    • name 是 'rose'count 是 50
    • oldCount 是 undefined(因为 obj['rose'] 不存在)。
    • 将 obj['rose'] 设置为 50
    • 输出:之前累加值:undefined, 当前值:50,最终结果:{"jack":300,"rose":50}
  6. 第五轮迭代

    • current 是 {name: 'rose', course: '历史', count: 50}
    • name 是 'rose'count 是 50
    • oldCount 是 50(因为 obj['rose'] 存在且为 50)。
    • 将 obj['rose'] 更新为 100
    • 输出:之前累加值:50, 当前值:50,最终结果:{"jack":300,"rose":100}
  7. 第六轮迭代

    • current 是 {name: 'rose', course: '地理', count: 50}
    • name 是 'rose'count 是 50
    • oldCount 是 100(因为 obj['rose'] 存在且为 100)。
    • 将 obj['rose'] 更新为 150
    • 输出:之前累加值:100, 当前值:50,最终结果:{"jack":300,"rose":150}
案例3的最后结果:
{"jack": 300,"rose": 150}
案例4:字符串拼接
        let arr = ['苹果', '香蕉', '荔枝', '山竹', '芒果']let steEle = arr.reduce((str, value) => {str = str + valuereturn str}, '')console.log(steEle);

给予初始值为空字符串,循环体进行拼接。

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

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

相关文章

(二十二)、k8s 中的关键概念

文章目录 1、总体概览2、第一层:物理机、集群、Node、Pod 之间的关系2、第二层:命名空间 Namespace3、定义4、控制平面(Control Plane)5、特别的概念 Service6、Deployment 经过 之前几篇文章对 k8s 的实践,结合实践&…

QT 中彻底解决中文乱码问题的指南

在使用 QT 进行开发时,中文乱码问题是许多开发者常遇到的困扰。这不仅影响用户体验,还可能导致数据处理错误。本文将详细介绍在 QT 中彻底解决中文乱码问题的方法,帮助开发者创建更友好的应用程序。 一、中文乱码问题的原因 在 QT 中出现中文…

appium文本输入的多种形式

目录 一、send_keys方法 二、press_keycode方法 三、subprocess方法直接通过adb命令输入 一、send_keys方法 这个是最常用的方法,不过通常使用时要使用聚焦,也就是先点击后等待: element wait.until(EC.presence_of_element_located((By…

AI模型库 : 下一个大型供应链攻击目标

像 Hugging Face 这样的AI模型平台,很容易受到攻击者多年来通过 npm、PyPI 和其他开源存储库成功执行的同类攻击的影响 Hugging Face 等AI模型存储库为攻击者提供了与 npm 和 PyPI 等开源公共存储库相同的将恶意代码植入开发环境的机会。 在今年 4 月即将举行的 Bl…

元学习-学习笔记

学习视频:火炉课堂 | 元学习(meta-learning)到底是什么鬼?_哔哩哔哩_bilibili 一、从传统机器学习到元学习 我们传统的机器学习,是手工设计一个模型,然后将训练数据投进模型中进行训练,得到一个最优的模型参数&#x…

bytetrack训练日志解读和相应源码分析

文章目录 日志结构训练过程概述评估结果对应代码80个周期665次迭代概念说明损失值日志结构 2024-10-12 09:04:25 | INFO | yolox.core.trainer:179 - Training start.

文件inode

磁盘结构: 众所周知扇面是磁盘存储数据的地方,而一个磁盘有个6个磁盘面,而磁头指向都是相同半径的扇面,所以我们可以抽象出来一个三维指针; 这样我们就抽象出来了一个磁盘,而我们的每个磁盘面都有相同名字…

微信小游戏function signature mismatch,RuntimeError: function signature mismatch

我看网上很多人再搜,没有解决方案。开一下尘封多年的博客,希望能帮到有缘人。 除了其他人发的插件版本问题,缓存问题,华佗问题。 我遇到还有个情况是 Task语法和 Enable Exceptions to Full Without Stacktrace 组合的问题。 如…

MES系列- 统计过程分析(SPC)实现

MES系列文章目录 ISA-95制造业中企业和控制系统的集成的国际标准-(1) ISA-95制造业中企业和控制系统的集成的国际标准-(2) ISA-95制造业中企业和控制系统的集成的国际标准-(3) ISA-95制造业中企业和控制系统的集成的国际标准-(4) ISA-95制造业中企业和控制系统的集成的国际标准…

MMA: Multi-Modal Adapter for Vision-Language Models

两个观察 图1所示。各种基于transformer的CLIP模型中不同层的数据集级识别精度。这个实验是为了确定样本属于哪个数据集。我们用不同的种子运行了三次,并报告了每层识别精度的平均值和标准差。 X E m b e d XEmbed XEmbed是指变压器块之前的文本或图像嵌入层&#x…

外包干了7天,技术明显退步。。。。。

先说一下自己的情况,本科生,22年通过校招进入南京某软件公司,干了接近2年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

【银河麒麟高级服务器操作系统·实例分享】裸金属服务器开机失败分析及处理建议

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 现象描述 裸金属物理服务器开机卡在EFI stub页面…

怎么在抖音视频里标注店铺定位信息?

随着短视频平台的兴起,抖音作为短视频领域的佼佼者,凭借其庞大的用户基础和强大的营销工具,已然成为了众多商家推广业务、吸引顾客的重要平台。通过在抖音视频中准确标注店铺定位信息,不仅能增加店铺的曝光率,还能方便…

Spring 设计模式之策略模式

Spring 设计模式之策略模式 策略模式构成部分java举例 策略模式 策略模式:允许定义一系列算法,并将每一个算法封装起来,使它们可以互相替换,且算法的变化可以独立于使用它们的客户端。 构成部分 Context(上下文&…

.NET 8 Web API 中的身份验证和授权

本次介绍分为3篇文章: 1:.Net 8 Web API CRUD 操作.Net 8 Web API CRUD 操作-CSDN博客 2:在 .Net 8 API 中实现 Entity Framework 的 Code First 方法https://blog.csdn.net/hefeng_aspnet/article/details/143229912 3:.NET …

详解Java之Spring MVC篇一

目录 Spring MVC 官方介绍 MVC RequestMapping 传递参数 无参数 单个参数 针对String类型 针对Integer类型 针对int类型 针对自定义类型 多个参数 参数重命名 参数强制一致 参数不强制一致 传递数组 ​编辑传递List ​编辑 传递JSON ​编辑 从路径中获取参…

Android demo文件内容记录

<style name"Theme.Demo1" parent"Theme.MaterialComponents.DayNight.DarkActionBar"><!-- Primary brand color. --><item name"colorPrimary">color/purple_500</item>//状态栏的背景色&#xff0c;优先级小于androi…

什么是微服务中的反应性扩展?

大家好&#xff0c;我是锋哥。今天分享关于【什么是微服务中的反应性扩展&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 什么是微服务中的反应性扩展&#xff1f; Reactive Extensions 也称为 Rx。这是一种设计方法&#xff0c;我们通过调用多个服务来收集结果…

Atlas800昇腾服务器(型号:3000)—Docker容器部署【图像分类】(十)

服务器配置如下&#xff1a; CPU/NPU&#xff1a;鲲鹏 CPU&#xff08;ARM64&#xff09;A300I pro推理卡 系统&#xff1a;Kylin V10 SP1【下载链接】【安装链接】 驱动与固件版本版本&#xff1a; Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run【下载链接】 Ascend-…

IDE(集成开发环境)

IDE&#xff08;集成开发环境&#xff09;是软件开发过程中不可或缺的工具&#xff0c;它集成了代码编写功能、分析功能、编译器、调试器等开发工具&#xff0c;旨在提高开发效率。不同的IDE支持不同的语言和框架&#xff0c;下面是一些通用的IDE使用技巧和插件推荐&#xff0c…