1.数组求和
let list = [1, 2, 3, 4, 5, 4, 5, 6, 1, 6, 7]
let newList = list.reduce((pre,cur)=>{
return pre+cur
})
console.log(list) //[1, 2, 3, 4, 5, 4, 5, 6, 1, 6, 7]
console.log(newList) //44
2.求最大值
let list = [1, 2, 3, 4, 5, 4, 5, 6, 1, 6, 7]
let newList = list.reduce((pre,cur)=>Math.max(pre,cur))
console.log(list) //[1, 2, 3, 4, 5, 4, 5, 6, 1, 6, 7]
console.log(newList) //7
3.去重
let list = [1, 2, 3, 4, 5, 4, 5, 6, 1, 6, 7]
let newList = list.reduce((pre, cur) => {
if (pre.indexOf(cur) === -1) {
pre.push(cur)
}
return pre
}, [])
console.log(list) //[1, 2, 3, 4, 5, 4, 5, 6, 1, 6, 7]
console.log(newList) //[1, 2, 3, 4, 5, 6, 7]
4.属性相加
let list2 = [
{
name: "lisa",
score: 50
},
{
name: "mike",
score: 60
},
{
name: "milk",
score: 40
},
]
let newList = list2.reduce((pre,cur)=>{
return pre+cur.score
},0)
console.log(newList) //150
5.出现的次数进行统计
let list = [1, 2, 3, 4, 5, 4, 5, 6, 1, 6, 7]
let newList = list.reduce((pre,cur)=>{
if(cur in pre){
pre[cur] ++
}else{
pre[cur] = 1
}
return pre
},{})
console.log(list) //[1, 2, 3, 4, 5, 4, 5, 6, 1, 6, 7]
console.log(newList) //{1: 2, 2: 1, 3: 1, 4: 2, 5: 2, 6: 2, 7: 1}
6.数组扁平化
let list2 = [1, [2, 3, 4], 5, 4, [5, 6, [1, 6, 7]]]
//方法一:reduce递归
function myFn(arr){
return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?myFn(cur):cur),[])
}
console.log(myFn(list2)) //[1, 2, 3, 4, 5, 4, 5, 6, 1, 6, 7]
//方法二:普通递归
function myFn2(arr){
let newArr = []
for (const key in arr) {
if (Array.isArray(arr[key])) {
// newArr = newArr.concat(myFn2(arr[key]))
newArr = [...newArr,...myFn2(arr[key])]
}else{
newArr.push(arr[key])
}
}
return newArr
}
console.log(myFn2(list2)) //[1, 2, 3, 4, 5, 4, 5, 6, 1, 6, 7]