数组的方法 reduce()

reduce方法在数组的每一项元素上都会执行回调函数。

语法array.reduce( callBack [ , init]  )

// 语法
arrary.reduce(function(pre, val, ind, arr){
// ....
}, init)

回调函数的参数有:初始值/上一次回调返回值、当前元素、当前索引、原数组。

callBack 函数:callBack(pre, val, ind, arr)。

  pre:初始值init  或 上一次回调函数的返回值。提供初始值init,作为首次回调函数的第一个参数pre的值使用。

  val: 当前元素。

  ind: 当前索引。

  arr: 原数组。

init初始值:作为首次回调函数的第一个参数的pre值使用。

1.求和

const array = [1, 2, 3, 4, 5]
const total = array.reduce((pre, val) => pre + val, 0)
console.log(total) // 15
const array = [
{ num: 10 },
{ num: 20 },
{ num: 30 }
]
const total = array.reduce((pre, val) => pre + val.num, 0)
console.log(total) // 60

2.最大值

   const array = [1, 2, 3, 8, 5, 2, 4]
const max = array.reduce((pre, val) => Math.max(pre, val))
// const max = array.reduce((pre, val) => pre > val ? pre : val)
// const max = arrary.reduce(pre, val) => Math.max(pre, val), array[0])
console.log(max ) // 8
   const array = [
{ num: 120 },
{ num: 10 },
{ num: 200 },
{ num: 30 }
]
const max= array.reduce((pre, val) => Math.max(pre, val.num), array[0].num)
// const max= array.reduce((pre, val) => Math.max(typeof pre === 'number' ? pre : pre.num, val.num))
console.log(max) // 200

3.其他用法

const array = [
{ age: 18, name: '花花' },
{ age: 19, name: '韩梅' },
{ age: 16, name: '小白' },
{ age: 17, name: '框猪' }
]
const res = array.reduce((pre, val, ind, arr) => {
let s = ''
let e = ''
switch (ind) {
case 0:
s = ''
break
case arr.length - 1:
s = '和'
e = '。'
break
default:
s = '、'
}
return pre + `${s}${val.name}${e}`
}, '参与者有')

console.log(res) // 参与者有花花、韩梅、小白和框猪。
const array = [
{ age: 18, name: '花花', type: 1 },
{ age: 19, name: '韩梅', type: 3 },
{ age: 16, name: '小白', type: 2 },
{ age: 17, name: '框猪', type: 1 },
{ age: 17, name: '懵萌', type: 1 },
{ age: 20, name: '大卫', type: 3 }
]
const Obj = array.reduce((pre, val) => {
pre[val.type] ? pre[val.type].push(val) : pre[val.type] = [val]
return pre
}, {}) console.log(Obj)

/*  实现数组分类
  {
    1: [
        { age: 18, name: '花花', type: 1 },
  { age: 17, name: '框猪', type: 1 },
  { age: 17, name: '懵萌', type: 1 }
    ],
    2: [
      { age: 16, name: '小白', type: 2 }
    ],
    3: [
      { age: 19, name: '韩梅', type: 3 },
      { age: 20, name: '大卫', type: 3 }
    ]
  }
*/ 

JavaScrip中 Array.reduce()的更多相关文章

  1. javascrip中array使用(续)

    ECMAScript 5中的数组的方法 Ecmascript5定义了9个新的数组方法遍历,映射,过滤,检测,简化和搜索数组. 1.forEach() Array.orEach()方法从头到尾遍历数组, ...

  2. javascrip中array使用

    一.测试数组长度是使用arr.length;(注:使用delete不会修改数组的length属性) 二.数组方法 1.join() Array.join()方法将数组所有元素都转化为字符串连接在一起, ...

  3. 用es6的Array.reduce()方法计算一个字符串中每个字符出现的次数

    有一道经典的字符串处理的问题,统计一个字符串中每个字符出现的次数. 用es6的Array.reduce()函数配合“...”扩展符号可以更方便的处理该问题. s='abananbaacnncn' [. ...

  4. Js中Array数组学习总结

    第一次写博客...有点方... 小白一枚(是真的小白),自学前端,下面来说说我在学习过程中总结的一些数组操作,如果说哪有错误,请各位大神多多指出,小的虚心接受. 引用类型分为Object类型(所谓的对 ...

  5. Array.reduce()学习

    昨天遇到的一道题:1234567890 => 1,234,567,890 要求其实就是使用逗号做千分位将数字进行分隔. 当时没想到任何方法,但是以前看到过,印象很深刻,今天就找了一下. 看到其实 ...

  6. 数组中的reduce 函数理解

    第一次见到reduce 是在js 的高级程序设计中,它的意思是把一个数组减少为一个数,举的例子是数组中元素的求和.它接受一个函数作为参数,函数又有两个参数,一个是prev, 前一个值,一个是next, ...

  7. JS Array.reduce 对象属性累加

    Array reduce() 方法  ,无非就是 计算数组元素 相加后的总和 ,看网上给的Demo 全是  [1,2,3,4,6].reduce 这种基本用法, 本次我将使用 reduce 实现 数组 ...

  8. JavaScript中Array

    一,针对于数组 const arr = ['a','b','c','d']; Array.indexOf  将“返回第一次出现给定元素的索引”; console.log(arr.indexOf('b' ...

  9. Array.reduce()方法的使用

    起因是学习异步函数的串行与并行写法时,发现reduce方法可以简化写法,然后看到一篇博客里面这样一段代码: var array = [1, [2, [3, 4], 5], 6]; function f ...

随机推荐

  1. Using Evernote with Wine on Mint

    Install Evernote Install Evernote in Wine: wine Evernote_xxx.exe; Backup Evernote Database File Loca ...

  2. 授予mysql的其他用户数据库的使用权限

    场景:不同的开发人员有不同的数据库的权限:也可适用于外包公司不同的开发权限. root用户登录数据库,命令行执行下面语句即可. grant select,delete,update,create,dr ...

  3. SpringBoot开发二十三-统一记录日志

    统一记录日志 AlphaAspect package com.nowcoder.community.aspect; import org.aspectj.lang.ProceedingJoinPoin ...

  4. DVWA(一):关于DVWA的基本介绍

    一.关于DVWA的搭建及报错问题: 传送门 上面链接主要解决安装DVWA报错的问题,这里防止自己再去找,所以记一下. (1)安装DVWA需要一个web环境,我实在win2003系统(xss_uploa ...

  5. MySQL JOIN的使用

    JOIN的使用 JOIN 理论 MySQL 七种 JOIN 的 SQL 编写 环境搭建 # 创建部门表 CREATE TABLE tbl_dept ( id INT NOT NULL AUTO_INC ...

  6. S3C2440—5.UART的使用

    文章目录 一.S3C2440中的UART介绍 1.1 电平匹配 1.2 UART数据帧与波特率 1.3UART框图 二.UART的配置 2.1 UART引脚的配置 2.2 波特率的配置 2.3 数据帧 ...

  7. NOIP 模拟 $13\; \text{卡常题}$

    题解 一道环套树的最小点覆盖题目,所谓环套树就是有在 \(n\) 个点 \(n\) 条边的无向联通图中存在一个环 我们可以发现其去掉一条环上的边后就是一棵树 那么对于此题,我们把所有 \(x\) 方点 ...

  8. 题解 Sequence

    传送门 只会爆搜系列 关于「本质不同的子序列个数」:限定长度,无限制(就是这题) 无限制的柿子是(令 \(dp[i]\) 为以 \(i\) 为结尾的不同子序列个数) \(dp[i] = \sum dp ...

  9. C#中的集合类

    集合相当于容器,用于将一系列相似的项组合在一起. 集合可以分为泛型集合类和非泛型集合类. 多数集合类都是派生自ICollection.IComparer.IEnumerable.IList.IDict ...

  10. jvm系列(五):jvm调优-从eclipse开始

    概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配.回收的情况来调整各区域内存比例或者gc回收的策略:更深一层就是根据dump出来的内存结构和线程栈来分析代码中不合理的地方给予改进 ...