# Array.prototype.reduce 小妙招
# 1.生成二维数组 or 二维变一维
希望把 [1,2,3,4,5,6,7,8,9,10,11,12]
变成
[[1,2,3,4,5],[6,7,8,9,10],[11,12]]
即 5 个一组的二维数组
function generate2Array(arr,l){
return arr.reduce((now,next)=>{
const last = now.length-1
if(now[last].length<l){
now[last].push(next)
}else{
now.push([next])
}
return now
},[[]])
}
generate2Array([1,2,3,4,5,6,7,8,9,10,11,12],5)
function generateArray(arr){
return arr.reduce((a,b)=>{
return a.concat(b)
},[])
}
generateArray([[1,2,3,4,5],[6,7,8,9,10],[11,12]])
# 2.归并为对象
const arr = [
{
key:'a',
defaultValue:'1'
},
{
key:'b',
defaultValue:'2'
}
]
arr.reduce((now,{key,defaultValue})=>{
now[key] = defaultValue
return now
},{}) // {a: "1", b: "2"}
# 3.计算数组中每个元素出现的次数
[9,1,3,3,2,5,5,7,5,9].reduce((a,b)=>{
if(a[b]){
a[b]++
}else{
a[b] = 1
}
return a
},{}) //{1: 1, 2: 1, 3: 2, 5: 3, 7: 1, 9: 2}
# 5.数组去重
[1,2,3,3,4,4,6,7,9,1,9].reduce((a,b)=>{
!a.includes(b) && a.push(b)
return a
},[])
# 6.当然还有比较常见的 求和
[1,2,3,4].reduce((a,b)=>a+b)