前言
reduce 为函数中的每一个元素依次执行回调函数,不包括数组中被删除或者从我被赋值的元素,接受四个参数
arr.reduce(function(prev,current,index,arr){})
数组求和
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
二维数组转一维数组
var arr = [[1,2],[3,4,5]];
var single = arr.reduce((acc,cur)=>{
return acc.concat(cur)
},[])
console.log(single);
多维数组转一维数组
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));
多维对象数组转化为一维对象数组
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)
计算数组中每个元素出现的次数
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);
网友评论