首页 > 编程语言 >JavaScript之数组高阶API—reduce()

JavaScript之数组高阶API—reduce()

时间:2022-11-07 19:11:37浏览次数:48  
标签:初始值 cur res age JavaScript reduce API name

一文搞懂JavaScript数组中最难的数组API——reduce()

前面我们讲了数组的一些基本方法,今天给大家讲一下数组的reduce(),它是数组里面非常重要也是比较难的函数,那么这篇文章就好好给大家介绍下reduce函数。
还是老样子,我们直接在应用中学习,直接上例子。让我们先定义一个包含几个对象的数组,注意观察下这个数组,可以看到里面有两个对象的age都是30。(下面会用到)

// 一个包含几个人物对象的数组。
const people = [
  { name: "John", age: 20 },
  { name: "Jane", age: 22 },
  { name: "Joe", age: 23 },
  { name: "Jack", age: 24 },
  { name: "Jackson", age: 30 },
  { name: "Jeff", age: 30 },
]
1.求数组中所有对象的年龄和

通过数组的reduce方法可以很方便的实现求和。reduce方法有两个参数,第一个参数是一个回调函数,第二个参数是初始值。下面就讲下这两个参数,回调函数,有四个参数,函数体处理自己的逻辑。第二个参数,它的值决定回调函数第一个参数的初始值。重点就是这个初始值。(文末会详细介绍这几个参数)

// 注意init 什么类型 res就是什么类型的
// res的初始值为0 ,求和所以得从0开始
const sum = people.reduce((res, cur) => res+cur.age, 0)
console.log(`结果:${sum}`); // 结果:149
// 如果我们把初始值设为100 那么结果应该是149+100了
const sum = people.reduce((res, cur) => res+cur.age, 100)
console.log(`结果:${sum}`); // 结果:249
2.按照年龄分组(比如上面有两个人都是30岁,那么他们应该分在一起)
const sum = people.reduce((res, cur) => {
   // console.log(res,cur);
   const age = cur.age
   if (res[age] == null) {
       // 这里需要使用[]动态获取age值 , 用.age会有不一样的效果
       res[age] = []
   }
   // 通过push插入值
   res[age].push(cur.name)
   return res
}, {})
code1.png
3.将数组对象转化为对象,name为key ,age为value
// 写法1
const sum = people.reduce((res, cur) => {
   const name = cur.name
   res[name]=cur.age
   return res
}, {})
// 写法2 解构返回值 化简
const sum = people.reduce((res, cur) => ({
   ...res,
   [cur.name] : cur.age
}), {})
// 写法3 回调方法的第二个参数也可以解构
const sum = people.reduce((res, { name, age }) => ({
   ...res,
   [name] : age
}), {})
// 结果都是一样的
console.log(sum)
image.png
4.最后看下各个参数打印的结果,以及不写定义初始值的情况
// 1.定义初始值
const sum = people.reduce((res, cur, index, array) => {
   console.log('

标签:初始值,cur,res,age,JavaScript,reduce,API,name
From: https://www.cnblogs.com/pglin/p/16656267.html

相关文章

  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
    前言 该篇介绍的内容如题,就是利用redis实现接口的限流( 某时间范围内最大的访问次数) 。正文 惯例,先看下我们的实战目录结构:首先是pom.xml核心依赖: <!--用于redis......
  • Mediapipe在安卓上运行
    一、安装Linux虚拟机,选择Ubuntu版本二、在Ubuntu上安装Mediapipe1.安装编译环境Bazel,我选择的是二进制文件安装,查看Bazel文档:使用Bazelisk安装/更新Bazel 1)安装......
  • JavaScript 中最常用的数组方法整理汇总
    英文|https://javascript.plainenglish.io/20-most-used-array-methods-in-javascript-c57276982377翻译|杨小爱在JavaScript中,一个数组实例有37个内置方法,常用的方......
  • 使用tp6的.env文件 api 设置
    使用tp6的.env文件设置bug调试设置成这样的话可以显示错误信息并且api调试的时候也不会出现div样式config.php.env文件......
  • APICloud实战案例:如何封装AVM组件?(以声网组件为例)
    AVM.js(Application-View-Model)是一个移动优先的高性能跨端JavaScript框架,支持一次编写多端渲染。它提供更趋近于原生的编程体验,通过简洁的模型来分离应用的用户界面、业......
  • 细说JavaScript闭包
    JavaScript闭包难点剖析一、作用域基本介绍ES6之前只有全局作用域与函数作用域两种,ES6出现之后,新增了块级作用域1.全局作用域在JavaScript中,全局变量是挂载在windo......
  • HTML,CSS,JavaScript的介绍
    网页组成:HTML,CSS,JavaScript:Html相当于骨架,Css相当于皮肤,JavaScript相当于肌肉三者结合起来形成完善的网页HTML超文本标记语言(hypertextmarkuplanguage)决定网......
  • Vue3, setup语法糖、Composition API全方位解读
    起初Vue3.0暴露变量必须return出来,template中才能使用;Vue3.2中只需要在script标签上加上setup属性,组件在编译的过程中代码运行的上下文是在setup()函数中,无......
  • 企微外部群Api
    个人微信开发API文档地址:wkteam.gitbook.io所有个人号模块分析:登录模块登录微控平台member/login获取微信二维码user/login执行微信登录getIPadLoginInfo获取联系人......
  • vue面试之Composition-API响应式包装对象原理
    本文主要分以下两个部分对CompositionAPI的原理进行解读:reactiveAPI原理refAPI原理reactiveAPI原理打开源码可以找到reactive的入口,在composition-api/src/......