数组的方法 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. 被字节跳动、小米、美团面试官问的AndroidFramework难倒了? 这里有23道面试真题,助力成为offer收割机!

    目录 1.Android中多进程通信的方式有哪些?a.进程通信你用过哪些?原理是什么?(字节跳动.小米)2.描述下Binder机制原理?(东方头条)3.Binder线程池的工作过程是什么样?(东方头条 ...

  2. Docker入门第三章

    配置阿里云镜像加速器 1.首先打开阿里云,搜索容器镜像服务,打开如下 2.配置镜像加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.j ...

  3. Microservices==>Service Mesh==>Serverless,走马观花

    [0] 始有道 话说图灵开天辟地,冯.诺伊曼造石补天! 始有道道生ML Machine LanguageML生汇编 assembler汇编生编译器 compiler编译器生PL Programming ...

  4. alpakka-kafka(8)-kafka数据消费模式实现

    上篇介绍了kafka at-least-once消费模式.kafka消费模式以commit-offset的时间节点代表不同的消费模式,分别是:at-least-once, at-most-once, ...

  5. 计算机毕业设计项目-基于SSM的学生会管理系统-基于ssm的社团信息管理系统

    注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台框架:SSM 前端技术:HTML+CSS+JavaScript+Bootstrap+jQuery 数据库: ...

  6. Git出错:“Please make sure you have the correct access rights and the repository exists.”

    此问题是需要重置ssh密钥 解决步骤如下: 1.重置用户名和邮箱: 打开Git Bash 进入Git命令,输入以下命令 git config --global user.name "你的用户 ...

  7. 模拟退火 Simulated annealing

    模拟退火 Simulated annealing 看看有空把图片完善一下好了 模拟退火算法的一些背景 既然要说模拟退火算法,就应该说一下模拟退火算法的背景,模拟退火算法是局部搜索算法的一种扩展,该算法 ...

  8. 000 PCI Express协议入门指南目录

    一.001 PCI Express体系结构(一)

  9. 尝试通过 JDBC 将 UTF-8 插入 MySQL 时出现“乱码”

    这是我的连接设置方式: Connection conn = DriverManager.getConnection(url + dbName + "?useUnicode=true& ...

  10. 数字化转型:敏捷和DevOps如何降低风险,提高速度

    进行数字化转型就意味着团队需要应对经常发生冲突的挑战--例如,要应对在复杂的相互依赖环境中快速变化的需求.对软件开发人员来说,这是一个熟悉的困境. 如果使用传统的瀑布方法来应对这些挑战,就会发现,在线 ...