javascript reduce()方法

news2024/10/7 14:26:27

相信挺多人对这个方法还是那么的陌生,其实也能理解,毕竟它能做到的事情还有其他的方法能做到。下面就说一下我个人的理解吧!!!

reduce()方法:

用法:

array.reduce(function(total,currentData,currentIndex,originArr),initialvalue)

参数解释:

total:必需。可作为初始值也是函数计算返回后的值;

currentValue: 必需。数组的当前每一项。

currentIndex:当前每一项的索引,从0开始;

originArr: 源数组。

initislvalue: 设置的初始值,后续从这关联计算,如果省略,则从数组的第一项开始。

reduce方法会对数组的每一项进行遍历,如果当前数组为空,那么不会执行回调函数!另外,回调函数必需要有返回值。

let arr = [1,3,5,7,9]
    arr.reduce((total,currentData,currentIndex,originArr)=>{//总和,当前值,当前索引,数组
      console.log('total,currentData,currentIndex,originArr :>> ', total,currentData,currentIndex,originArr);
      return total+currentData
    },0)

有哪些场景应用呢???这个如果让我临时想,怕是一脸懵,于是就网上找点总结下吧!

  1. 如上述例子,可用于数组数据的计算。我们不仅仅看到例子的加法,可以赋予更复杂形式的计算。

假如此数组元素不是number类型的呢?如下

 let arr = [{value:1},{value:3},{value:5}]
    let value = arr.reduce((total,currentData,currentIndex,originArr)=>{//总和,当前值,当前索引,数组
      return total+currentData.value
    },0)
    console.log('value :>> ', value);//9
  1. 可将二维数组转为一维数组

let arr = [1,3,[5,7,9]]
    let value = arr.reduce((total,currentData,currentIndex,originArr)=>{//总和,当前值,当前索引,数组
      return total.concat(currentData)
    },[])
    console.log('value :>> ', value);//1,3,5,7,9

那如果n维数组转一维数组呢?

3.计算每个元素出现的次数。(现给你一个简单数组,计算每个元素出现的次数,统计结果用一个对象来表示,比如{a:2,b:1,c:5})

let arr = ['a','b','a','a','c','d','d']
    let value = arr.reduce((total,currentData,currentIndex,originArr)=>{//总和,当前值,当前索引,数组
      if(total[currentData]){
        total[currentData]+=1
      }else{
        total[currentData]=1
      }
      return total
    },{})
    console.log('value :>> ', value);//{a: 3, b: 1, c: 1, d: 2}
  1. 数组去重

let arr = ['a','b','a','a','c','d','d']
    let value = arr.reduce((total,currentData,currentIndex,originArr)=>{//总和,当前值,当前索引,数组
      if(total.includes(currentData)){
        return total
      }else{
        total.push(currentData)
        return total
        // return total.concat(currentData)
      }
    },[])
    console.log('value :>> ', value);//['a', 'b', 'c', 'd']

reduce并非独一无二,只不过有时候或许能让事情变得简单点,当然了,比如for循环一个个处理,用了reduce代码看起来是不是有那么点高级呢,哈哈哈哈。只能说知道有这个方法就好,能记住每一个参数那便更好,实际操作又不是让你默写,百度随时查!!!!!

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

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

相关文章

管理bug的工具

一、国内的bug管理软件: 1、禅道 禅道是第一款国产开源项目管理软件。它的核心管理思想基于敏捷方法scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能。在一个软件中就…

nodejs+vue+element+eachers构建开源项目大型连续剧(5)前端请求封装,完成用户注册。

在前端项目开发中,一个好的请求封装可以给我们带来诸多便利,减少了代码重复,优化了问题处理等。那接下来我们一起学习一下怎么做到对一个请求的简单封装吧。主要通过对axios请求的二次封装,实现页面的请求以及必要的优化。 一、引…

Word处理控件Aspose.Words功能演示:在 C# 中将 Word DOC DOCX 转换为 Markdown

Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处…

每个Java程序员都必须知道的四种负载均衡算法

前言 一般来说,我们在设计系统的时候,为了系统的高扩展性,会尽可能的创建无状态的系统,这样我们就可以采用集群的方式部署,最终很方便的根据需要动态增减服务器数量。但是,要使系统具有更好的可扩展性&…

【UE4 第一人称射击游戏】32-添加击杀AI的提示功能(使用到控件蓝图的动画功能)

上一篇:【UE4 第一人称射击游戏】31-更好的UI界面本篇效果:可以看到在击杀AI后,右上角有击杀提示信息步骤:新建一个控件蓝图命名为“KillPopup”双击打开“KillPopup”,拖入一个图像控件,锚点设置为右上角&…

RobotFramework测试库

在RF 测试库里面,分为三种测试库标准测试库扩展测试库远程测试库标准测试库随 Robot Framework 版本一同发布的测试库, 不需要单独安装,但部分标准库仍然需要手动导入标准库有扩展测试库标准库以外的其他测试库都统称为扩展测试库&#xff0c…

OceanBase产品家族及基础概念

第二章:OceanBase产品家族及基础概念 1. OceanBase产品家族 1.1 OceanBase数据库产品家族 1.2 OceanBase数据库内核 1.2.1 高扩展 • 水平扩展 • 按需在线扩容、缩容、不停服务 • 单集群突破100台服务器 1.2.2 高性能 • 峰值6,100万次/秒(真实业…

P12 PyTorch 常见函数梯度

目录:1: 常见函数的导数2: 梯度与微分的关系3: 常见函数的梯度4: 梯度更新常见问题一 常见函数的导数(复合函数求导证明)二 梯度与微分的关系2.1 微分: x 为一元变量时微分: x 为向量时微分矩阵…

学术加油站|机器学习应用在数据库调优领域的前沿工作解读

编者按 本文系北京理工大学科研助理牛颂登所著,本篇也是「 OceanBase 学术加油站」系列稿件第八篇。 「牛颂登:北京理工大学科研助理。 硕士期间在电子科技大学网络空间安全研究院从事聚类和强化学习相关算法研究,在应用聚类研究个性化在线学…

Python之Hermite多项式

文章目录Hermite多项式求导和积分求根和反演拟合其他Hermite多项式 Hermite多项式是一种非常重要的正交多项式,尤其在量子力学中,是谐振子的本征态,在物理学中,其定义为 Hn(x)(−1)nex2dndxne−x2H_n(x)(-1)^ne^{x^2}\frac{\text…

算法之动态规划实战

目录 前言: 如何量化两个字符串的相似度? 如何编程计算莱文斯坦距离? 如何编程计算最长公共子串长度? 参考资料 前言: 利用 Trie 树,可以实现搜索引擎的关键词提示功能,这样可以节省用户输…

【Python+pandas】学生测试成绩求和排序

✨博文作者 wangzirui32 💖 喜欢的可以 点赞 收藏 关注哦~~ 👉本文首发于CSDN,未经许可禁止转载 😎Hello,大家好,我是wangzirui32,最近时间不够充足,鸽了几个月,这是2023…

【蓝桥杯第十三届C++B组】真题训练(5 / 8) - java写法

目录 4402.刷题统计 - 数学模拟 4403. 修剪灌木 - 思维 4404. X 进制减法 - 进制运算 贪心 4405. 统计子矩阵 - 前缀和 双指针​​​​​​​ 1、一维前缀和 2、二维前缀和 4406. 积木画 - dp 1、找规律dp 4402.刷题统计 - 数学模拟 4402. 刷题统计 - AcWing题库 思…

素数(prime)总结

素数的介绍 素数定义 质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。 根据算术基本定理,每一个…

linux 文件夹多用户共享 解决文件删除的Permission denied

linux文件属性基础 Linux文件属主和属组 通过命令ls 可以查看文件属性: zcargo-MS-7D53:~/Desktop/parent_ceshi$ ll -lh total 16K drwxrwxr-x 2 zc zc 4.0K 1月 10 13:59 ceshi/ drwxrwxr-x 2 zc zc 4.0K 1月 10 13:59 ceshi02/以上展示命令的意思&#xff1…

大数据概念及Hadoop介绍

大数据概念及Hadoop介绍大数据概念数据存储单位大数据定义大数据的特点(5V特征)大数据部门组织架构分布式技术负载均衡故障转移伸缩性分布式技术总结分布式和集群的区别Hadoop介绍Hadoop核心组件Hadoop发展简史Hadoop特性优点与行业应用Hadoop特性优点行业应用Hadoop发行版本及…

14、Java网络编程

一、 网络编程概述Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里&…

【广度优先搜索遍历 + 染色法】判断二分图

还记得当时才大一,上离散数学课,当时觉得很不屑,就是觉得这学的什么玩弄啥用没有,但是其实很多的算法思想在解决题目时很有价值。 本文就将使用染色法解决判断二分图问题,使用广度优先搜索遍历和 Java 语言实现 一、题…

车辆逆行识别检测系统 opencv

车辆逆行识别检测系统通过opencvyolo网络深度学习技术,对现场画面中车辆逆向行驶行为进行检测抓拍预警。 OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉处理开源软件库,支持与计算机视觉和机器学习相关的众多…

嵌入式 LINUX 驱动开发 day02 字符设备驱动 字符设备驱动 虚拟串口, 一个驱动支持多个设备

1. 驱动开发 字符设备驱动 代码&#xff1a; vser.c #include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h>#include <linux/fs.h> /***** 设备相关信息 ******/ static unsigned int VSER_MAJOR 256; //主设备号…