数组之reduce详解
1 reduce定义
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)
开始缩减,最终计算为一个值。
注意:reduce()对于空数组是不会执行回调函数的
2 语法
array.reduce(function(prev, cur, index, arr), init)
prev (上一次调用回调返回的值,或者是提供的初始值)
item (数组中当前被处理的元素)
index (当前元素在数组中的索引)
arr (调用的数组)
init (传递给函数的初始值)
```
1、累加 带初始值
let arr= [1,2,3,4]
let sum = arr.reduce((prev,item) => {
return prev + item
},10)
console.log(sum)
2、累加不带初始值
let arr= [1,2,3,4]
let sum = arr.reduce((prev,item) => {
return prev + item
},)
console.log(sum)
3、reduce数组去重
let arr = [1,2,3,3,2,1,4]
arr.reduce((prev,item) => {
if(!(prev.includes(item))){
prev.push(item)
}
return prev
},[])
4、reduce求数组中最大值
let arr= [1,2,3,4]
arr.reduce((prev,item) => {
return Math.max(prev,item)
})
5、reduce将二维数组转为转为一维数组
let arr= [[1,2],[3,4],[5,6]]
arr.reduce((prev,item) => {
return prev.concat(item)
},[])
// [1,2,3,4,5,6]
6、reduce对象属性里面求和
let arr = [
{name: 'zs',age: 19},
{name: 'ls',age: 21},
{name: 'zl',age: 23}
]
arr.reduce((prev,item) => {
return prev + item.age
},0)
7、reduce 实现forEach
let arr= [1,2,3,4]
Array.prototype.reduceForEach = function(callback) {
this.reduce((prev,item,index,array) => {
callback(item,index)
},[])
}
arr.reduceForEach((item,index,array) => {
console.log(item,index)
})
8、reduce 实现map
let arr= [1,2,3,4]
Array.prototype.reduceMap = function(callback) {
return this.reduce((prev,item,index,array) => {
const arr2 = callback(item,index,array)
prev.push(arr2)
return prev
},[])
}
arr.reduceMap((item,index) => item)
arr.reduceMap((item,index) => {
return item + index
})
9、reduce实现过滤 filter
let arr =[1,2,3,4]
Array.prototype.reduceFilter = function(callback) {
return this.reduce((prev,item,index,array) => {
if(callback(item,index,array)){
prev.push(item)
}
return prev
},[])
}
arr.reduceFilter(item => item !== 2)
```