JavaScrip中 Array.reduce()
数组的方法 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()的更多相关文章
- javascrip中array使用(续)
ECMAScript 5中的数组的方法 Ecmascript5定义了9个新的数组方法遍历,映射,过滤,检测,简化和搜索数组. 1.forEach() Array.orEach()方法从头到尾遍历数组, ...
- javascrip中array使用
一.测试数组长度是使用arr.length;(注:使用delete不会修改数组的length属性) 二.数组方法 1.join() Array.join()方法将数组所有元素都转化为字符串连接在一起, ...
- 用es6的Array.reduce()方法计算一个字符串中每个字符出现的次数
有一道经典的字符串处理的问题,统计一个字符串中每个字符出现的次数. 用es6的Array.reduce()函数配合“...”扩展符号可以更方便的处理该问题. s='abananbaacnncn' [. ...
- Js中Array数组学习总结
第一次写博客...有点方... 小白一枚(是真的小白),自学前端,下面来说说我在学习过程中总结的一些数组操作,如果说哪有错误,请各位大神多多指出,小的虚心接受. 引用类型分为Object类型(所谓的对 ...
- Array.reduce()学习
昨天遇到的一道题:1234567890 => 1,234,567,890 要求其实就是使用逗号做千分位将数字进行分隔. 当时没想到任何方法,但是以前看到过,印象很深刻,今天就找了一下. 看到其实 ...
- 数组中的reduce 函数理解
第一次见到reduce 是在js 的高级程序设计中,它的意思是把一个数组减少为一个数,举的例子是数组中元素的求和.它接受一个函数作为参数,函数又有两个参数,一个是prev, 前一个值,一个是next, ...
- JS Array.reduce 对象属性累加
Array reduce() 方法 ,无非就是 计算数组元素 相加后的总和 ,看网上给的Demo 全是 [1,2,3,4,6].reduce 这种基本用法, 本次我将使用 reduce 实现 数组 ...
- JavaScript中Array
一,针对于数组 const arr = ['a','b','c','d']; Array.indexOf 将“返回第一次出现给定元素的索引”; console.log(arr.indexOf('b' ...
- Array.reduce()方法的使用
起因是学习异步函数的串行与并行写法时,发现reduce方法可以简化写法,然后看到一篇博客里面这样一段代码: var array = [1, [2, [3, 4], 5], 6]; function f ...
随机推荐
- 如何远程调试自定义开发的Flume应用
一.前言 Flume作为当下最流行的大数据采集组件之一.其本身拥有分布式/高可靠/高可用等优点,但相比较于Flink/Spark/Kafka等大数据组件,其对于本地调试的功能支持度并不高,如果我们没有 ...
- Ivy入门笔记
安装过程 命令行安装 下载和安装JDK5.Eclipse3.5.Ant 1.8.Ivy 2.2: 安装JDK:成功标志:在命令行下运行java命令,得到java命令行帮助: 安装Ant:解压Ant,在 ...
- 使用vimdiff做hg的版本比较工具
gvim的文本比较功能很强,命令行用法:gvim -d file1 file2,hg自带的hg diff没有颜色标示,含义也不够清晰,所以需要用vim的diff代替它,实现方法是在全局配置文件中增加: ...
- WPF 线程开启等待动画
public static Dictionary<string, object> Dic = new Dictionary<string, object>();//定义一个字典 ...
- 基于AOP和HashMap原理学习,开发Mysql分库分表路由组件!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 什么?Java 面试就像造火箭 单纯了! 以前我也一直想 Java 面试就好好面试呗 ...
- centos7上用docker搭建简单的前后端分离项目
1. 安装docker Docker 要求 CentOS 系统的内核版本高于 3.10 ,首先验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看你当前的内核版本 使 ...
- 【Java】jeesite初始配置以及代码生成工具的使用
jeesite简单使用 首先去技术服务与支持.版本区别一览表 - JeeSite 4.x找到源码下载的部分 JeeSite 源码下载:https://gitee.com/thinkgem/jeesit ...
- 【笔记】简谈L1正则项L2正则和弹性网络
L1,L2,以及弹性网络 前情提要: 模型泛化与岭回归与LASSO 正则 ridge和lasso的后面添加的式子的格式上其实和MSE,MAE,以及欧拉距离和曼哈顿距离是非常像的 虽然应用场景不同,但是 ...
- 加载GIF图片优化方案
前言 许多项目需要加载GIF图片,但是在直接使用UIImageView加载存在许多问题,于是查找资料做了一个加载GIF的Demo,思路来源. 思路 使用FLAnimatedImage来加载GIF图片, ...
- xv6学习笔记(3):中断处理和系统调用
xv6学习笔记(3):中断处理和系统调用 1. tvinit函数 这个函数位于main函数内 表明了就是设置idt表 void tvinit(void) { int i; for(i = 0; i & ...