前言
reduce 為函數(shù)中的每一個元素依次執(zhí)行回調函數(shù)撰豺,不包括數(shù)組中被刪除或者從我被賦值的元素粘捎,接受四個參數(shù)
arr.reduce(function(prev,current,index,arr){})
數(shù)組求和
var arr = [1,2,3,4,5];
var sum = arr.reduce((x,y)=>x+y)
console.log(sum); //15
var ride = arr.reduce((x,y)=>x*y)
console.log(ride); //120
二維數(shù)組轉一維數(shù)組
var arr = [[1,2],[3,4,5]];
var single = arr.reduce((acc,cur)=>{
return acc.concat(cur)
},[])
console.log(single);
多維數(shù)組轉一維數(shù)組
var arr = [[1,2],[3,4,5],[6,7,[8,9]]];
var single = function(arr){
return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?single(cur):cur),[])
}
console.log(single(arr));
多維對象數(shù)組轉化為一維對象數(shù)組
var arrayObject = [
{
name: '張三',
children: [
{
name: '張三兒子',
children: [{}],
},
],
},
{
name: '李四',
children: [
{
name: '李四兒子',
children: [{}],
},
],
},
];
function newArr(arrayObject ){
return arrayObject .reduce((result,item)=>{
return result.concat(item,(Array.isArray(item.children) ? newArr(item.children) : []))
},[])
}
let changedData = newArr(arrayObject )
console.log(changedData)
計算數(shù)組中每個元素出現(xiàn)的次數(shù)
var arr = [1,2,2,2,2,2,2,2,3,4,4,4,4,4,5,5];
var countNumbs = arr.reduce((acc,cur)=>{
if (cur in acc) {
acc[cur] ++;
}else{
acc[cur] = 1;
}
return acc;
},{})
console.log(countNumbs);