reduce的一些用法
一、 reduce定义
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
二、语法
array.reduce(function(prev, cur, index, arr), init)
- prev (上一次调用回调返回的值,或者是提供的初始值(initialValue))
- cur (数组中当前被处理的元素)
- index (当前元素在数组中的索引)
- arr (调用的数组)
- init (传递给函数的初始值)
三、reduce累加
带初始值
var arr = [1,2,3,4] var sum = arr.reduce((pre, item) => {return pre + item }, 10) console.log(sum) // 20
不带初始值
var arr = [1,2,3,4] var sum = arr.reduce((pre, item) => {return pre + item },) console.log(sum) // 10
四、reduce数组去重
var arr = [1,2,3,3,2,1,4] arr.reduce((acc, cur) => {if (!(acc.includes(cur))) {acc.push(cur)}return acc }, []) // [1, 2, 3, 4]
五、reduce求数组项最大值
var arr = [1, 2, 3, 4]; arr.reduce((prev, cur) => {return Math.max(prev,cur); }); //4
六、reduce将二维数组转为一维数组
var arr = [[1,2], [3,4], [5,6]] arr.reduce((acc, cur) => {return acc.concat(cur) }, []) // [1,2,3,4,5,6]
七、reduce对象里的属性求和
var arr = [{subject: 'Math', score: 90},{subject: 'Chinese', score: 90},{subject: 'English', score: 100} ] arr.reduce((pre, cur) => {return cur.score + pre }, 0) //280
八、reduce计算数组中每个元素出现的个数
var arr = [1, 2,3,3,2,1,2,1] arr.reduce((acc, cur) => {if (!(cur in acc)) {acc[cur] = 1} else {acc[cur] += 1}return acc }, {}) //{1: 3, 2: 3, 3: 2}
九、reduce按属性给数组分类
var arr = [{subject: 'Math', score: 90},{subject: 'Chinese', score: 90},{subject: 'English', score: 100},{subject: 'Math', score: 80},{subject: 'Chinese', score: 95} ]; arr.reduce((acc, cur) => {if (!acc[cur.type]) {acc[cur.type] = [];}acc[cur.type].push(cur)return acc }, {})
十、reduce实现map
var arr = [1, 2, 3, 4] Array.prototype.reduceMap = function(callback) {return this.reduce((acc, cur, index, array) => {const item = callback(cur, index, array)acc.push(item)return acc}, []) } arr.reduceMap((item, index) => {return item + index }) // [1, 3, 5, 7]
十一、reduce实现forEach
var arr = [1, 2, 3, 4] Array.prototype.reduceForEach = function(callback) {this.reduce((acc, cur, index, array) => {callback(cur, index, array)}, []) }arr.reduceForEach((item, index, array) => {console.log(item, index) }) // 1234 // 0123
十二、reduce实现filter
var arr = [1, 2, 3, 4] Array.prototype.reduceFilter = function (callback) {return this.reduce((acc, cur, index, array) => {if (callback(cur, index, array)) {acc.push(cur)}return acc}, []) } arr.reduceFilter(item => item % 2 == 0) // 过滤出偶数项。 // [2, 4]
十三、reduce实现find
var arr = [1, 2, 3, 4] var obj = [{ a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }] Array.prototype.reduceFind = function (callback) {return this.reduce((acc, cur, index, array) => {if (callback(cur, index, array)) {if (acc instanceof Array && acc.length == 0) {acc = cur}} if ((index == array.length - 1) && acc instanceof Array && acc.length == 0) {acc = undefined}return acc}, []) } arr.reduceFind(item => item % 2 == 0) // 2 obj.reduceFind(item => item.a % 2 == 0) // {a: 2} obj.reduceFind(item => item.a % 9 == 0) // undefined
reduce的一些用法相关推荐
- Python中的map()函数和reduce()函数的用法
Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下
- reduce的梦幻用法
reduce的梦幻用法 最近经常在项目中经常看到别人用reducer处理数据,很是牛掰,很梦幻, 不如自己琢磨琢磨. 先看w3c语法 array.reduce(function(total, curr ...
- java reduce.mdn_reduce高级用法
reduce作为ES5新增的常规数组方法之一,对比forEach .filter和map,在实际使用上好像有些被忽略,发现身边的人极少用它,导致这个如此强大的方法被逐渐埋没. 如果经常使用reduce ...
- Python 3.x中reduce()函数完整用法
在Python 3.x中,reduce()不再是内置函数,而是移到了标准库functools中,需要先导入再使用,其官方解释如图所示: 从官方文档可知,该函数用法要点如下: 1)把一个双参数函数以累积 ...
- 高阶函数 map,reduce, filter的用法
1. map 用法 1 def fun_C(x): 2 """求平方""" 3 return x ** 2 4 5 6 result = m ...
- reduce()用法
再看reduce的用法.reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是: reduc ...
- reduce函数及其用法
reduce方法在平时用的比较少,最近整理数组去重觉得它还是挺好用的,然而它还有好多功能,下面就梳理一下它都有哪些用法. 一.mdn给的解释: reduce() 方法对数组中的每个元素按序执行一个由您 ...
- reduce()的基本用法
一.语法: array.reduce(function(total, currentValue, currentIndex, arr), initialValue) 二.参数: total 必需.初始 ...
- reduce的基本用法。
js数组reduce方法 reduce的基本定义 基本用法 计算数组里面所有值的和! 累加对象数组里的值! 将二维数组转换为一维数组! 计算数组中每个元素出现的次数 用Reduce按属性对object ...
- python中lambda以及与filter/map/reduce结合的用法
一.lambda函数即匿名函数,和普通的函数相比,就是省去了函数名称而已: lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边是函数体的返回值 g = lambda x,y : x+y ...
最新文章
- 阿里巴巴研究员刘国华:阿里巴巴智能运维体系建设
- [转载] Java中Runtime的使用
- 为什么我做数据库类的程序要用代码生成器,而且是前前后后,反反复复 [转]...
- 陌陌宣布启用全新中文名“挚文集团” ,Q2净利润4.6亿元
- Altium Designer画元器件封装三种方法
- Angular官方教程采坑
- 上位机和下位机笔记总结
- 专访陈星汉:“游戏禅师” 的自我苛刻与孤独
- 扬声器阻抗曲线与对应的频率响应曲线
- Redo和Undo的区别
- 个人计算机键盘上的按键击键声音小,电脑键盘按键会双击怎么办
- Footer置于页面底部的技巧
- 如何在Mac上安全彻底的卸载软件?
- 下落(fall)【模拟】
- 如何对“诱惑”说不?
- 如何用python爬取公众号文章_如何使用 Python 爬取微信公众号文章
- 利用python自带的库sympy,求解不同阻尼比的振动方程表达式
- docker RabbitMQ:修改Channel limit
- idea将指定目录打成jar包
- 视频如何剪切,分割视频软件哪个好
热门文章
- 【手写数字识别】基于Lenet网络实现手写数字识别附matlab代码
- java面试之Java基础
- 理解IP数据包分片原理
- MotionEvent详解
- vs提示: the following site was not found in the following configuration files解决办法
- 利民发布 HR-10 2280 M.2 SSD 散热器,搭载双 AGHP 逆重力热管
- u 打造便携式linux 盘_UNetbootin制作U盘Linux
- RabbitMQ持久化相关配置
- Canvas-Study
- 学习OceanBase :如何在MySQL模式下创建一个用户?