一、 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的一些用法相关推荐

  1. Python中的map()函数和reduce()函数的用法

    Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下  

  2. reduce的梦幻用法

    reduce的梦幻用法 最近经常在项目中经常看到别人用reducer处理数据,很是牛掰,很梦幻, 不如自己琢磨琢磨. 先看w3c语法 array.reduce(function(total, curr ...

  3. java reduce.mdn_reduce高级用法

    reduce作为ES5新增的常规数组方法之一,对比forEach .filter和map,在实际使用上好像有些被忽略,发现身边的人极少用它,导致这个如此强大的方法被逐渐埋没. 如果经常使用reduce ...

  4. Python 3.x中reduce()函数完整用法

    在Python 3.x中,reduce()不再是内置函数,而是移到了标准库functools中,需要先导入再使用,其官方解释如图所示: 从官方文档可知,该函数用法要点如下: 1)把一个双参数函数以累积 ...

  5. 高阶函数 map,reduce, filter的用法

    1. map 用法 1 def fun_C(x): 2 """求平方""" 3 return x ** 2 4 5 6 result = m ...

  6. reduce()用法

    再看reduce的用法.reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是: reduc ...

  7. reduce函数及其用法

    reduce方法在平时用的比较少,最近整理数组去重觉得它还是挺好用的,然而它还有好多功能,下面就梳理一下它都有哪些用法. 一.mdn给的解释: reduce() 方法对数组中的每个元素按序执行一个由您 ...

  8. reduce()的基本用法

    一.语法: array.reduce(function(total, currentValue, currentIndex, arr), initialValue) 二.参数: total 必需.初始 ...

  9. reduce的基本用法。

    js数组reduce方法 reduce的基本定义 基本用法 计算数组里面所有值的和! 累加对象数组里的值! 将二维数组转换为一维数组! 计算数组中每个元素出现的次数 用Reduce按属性对object ...

  10. python中lambda以及与filter/map/reduce结合的用法

    一.lambda函数即匿名函数,和普通的函数相比,就是省去了函数名称而已: lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边是函数体的返回值 g = lambda x,y : x+y ...

最新文章

  1. 阿里巴巴研究员刘国华:阿里巴巴智能运维体系建设
  2. [转载] Java中Runtime的使用
  3. 为什么我做数据库类的程序要用代码生成器,而且是前前后后,反反复复 [转]...
  4. 陌陌宣布启用全新中文名“挚文集团” ,Q2净利润4.6亿元
  5. Altium Designer画元器件封装三种方法
  6. Angular官方教程采坑
  7. 上位机和下位机笔记总结
  8. 专访陈星汉:“游戏禅师” 的自我苛刻与孤独
  9. 扬声器阻抗曲线与对应的频率响应曲线
  10. Redo和Undo的区别
  11. 个人计算机键盘上的按键击键声音小,电脑键盘按键会双击怎么办
  12. Footer置于页面底部的技巧
  13. 如何在Mac上安全彻底的卸载软件?
  14. 下落(fall)【模拟】
  15. 如何对“诱惑”说不?
  16. 如何用python爬取公众号文章_如何使用 Python 爬取微信公众号文章
  17. 利用python自带的库sympy,求解不同阻尼比的振动方程表达式
  18. docker RabbitMQ:修改Channel limit
  19. idea将指定目录打成jar包
  20. 视频如何剪切,分割视频软件哪个好

热门文章

  1. 【手写数字识别】基于Lenet网络实现手写数字识别附matlab代码
  2. java面试之Java基础
  3. 理解IP数据包分片原理
  4. MotionEvent详解
  5. vs提示: the following site was not found in the following configuration files解决办法
  6. 利民发布 HR-10 2280 M.2 SSD 散热器,搭载双 AGHP 逆重力热管
  7. u 打造便携式linux 盘_UNetbootin制作U盘Linux
  8. RabbitMQ持久化相关配置
  9. Canvas-Study
  10. 学习OceanBase :如何在MySQL模式下创建一个用户?