数组的方法 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. js中其他数据类型的值转为字符串的相关总结

    有这样一个面试题: 此题考查的是其他类型的值转换为字符串后的结果 下面我们就由此来总结一下其他类型的值转为字符串后的值都是什么? 从上面的实例可以看出,基本数据类型的值转换成字符串都如我们预期的那样. ...

  2. 响应式编程基础教程:Spring Boot 与 Lettuce 整合

    本文主要介绍响应式编程访问 Redis,以及 Spring Boot 与 Lettuce 的整合使用. Lettuce 是可扩展性线程安全的 Redis 客户端,用于同步.异步和响应式使用.如果多个线 ...

  3. Spring Boot自动配置原理与实践(二)

    前言 在之前的博文(Spring Boot自动配置原理与实践(一))中,已经介绍了Spring boot的自动配置的相关原理与概念,本篇主要是对自动配置的实践,即自定义Starter,对原理与概念加深 ...

  4. Sqli-Labs less38-45

    less-38 前置基础知识:堆叠注入 参考链接:https://www.cnblogs.com/lcamry/p/5762905.html 实际上就是多条sql语句一起使用. 在38关源码中加入输出 ...

  5. Linux通过命令增加IPV6地址

    第一步:输入nmcli connection modify "eth0" ipv6.method  manual ipv6.address  ipv6地址/64 ifname et ...

  6. NOIP 模拟 $19\; \rm v$

    题解 一道概率与期望的状压题目 这种最优性的题目,我们一般都是倒着转移,因为它的选择是随机的所以我们无法判断从左还是从右更有,所以我们都搜一遍 时间一定会爆,采用记忆化搜索,一种状态的答案一定是固定的 ...

  7. 如何在github上传本地项目代码

    首先你要在github上申请一个账号 网址:https://github.com/ 然后你要下载一个git工具 网址:https://gitforwindows.org/ 进入官网直接下载就行,下载完 ...

  8. C语言之----面向对象的方法实现链表的操作

    1 /* 2 * 详细运行过程: 本程序实现的是对链表的简单的操作,即链表的增 删 改 查 销毁 初始化 3 * 运用面向对象的思想,实现一个类op,op中包括了所有的链表操作方法 4 * 其他的程序 ...

  9. CentOS8安装Mysql5.7

    检查是否安装mysql [root@iZ2ze8crquorxf6c7l0eluZ ~]# rpm -qa |grep mysql [root@iZ2ze8crquorxf6c7l0eluZ ~]# ...

  10. [转载]getContentPane()

    关于setContentPane()和getContentPane()的应用       我们可以在 JFrame 对象中添加 AWT 或者 Swing 组件.但是,虽然它有 add 方法,却不能直接 ...