定义:
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。对空数组是不会执行回调函数的。
案例
1.数组求和
// 1.数组求和
var arr = [1,5,8,6,15,78,65,25,48,55]
var sum = arr.reduce(function(total,currentValue){
return total+currentValue;
}, 0);
console.log(sum);//306
var eachSum = 0;
arr.forEach(function(currentValue){
eachSum += currentValue;
})
console.log(eachSum);//306
2.合并二维数组
//2.合并二维数组
var twoArr = [['mu','zi'],['dig','big'],['lucky','jiji']];
var oneArr = twoArr.reduce(function(total,currentValue){
// console.log(total)
return total.concat(currentValue);
}, [])
console.log(oneArr);//["mu", "zi", "dig", "big", "lucky", "jiji"]
3.统计一个数组中重复的单词的个数:
//3.统计一个数组中有多少个不重复的单词:
// 不用reduce时:
var arr = ["apple","orange","apple","orange","pear","orange"];
function getWordCnt(){
var obj = {};
for(var i= 0, l = arr.length; i< l; i++){
var item = arr[i];
obj[item] = (obj[item] +1 ) || 1;
}
return obj;
}
console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1}
// 用reduce时:
var arr = ["apple","orange","apple","orange","pear","orange"];
function getWordCnt(){
return arr.reduce(function(prev,next){
prev[next] = (prev[next] + 1) || 1;
return prev;
},{});
}
console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1}
4.数组对象变对象 [{},{},{}] ==> {}
// [{1:'liming'},{2:'xiaohong'},{3:'xiaoming'}] => {1:'liming',2:'xiaohong',3:'xiaoming'}}
let arrObj = [{1:'liming'},{2:'xiaohong'},{3:'xiaoming'}];
let obj = arrObj.reduce((total,item) => {
return Object.assign(total,item)
},{});
console.log(obj); // {1: 'liming', 2: 'xiaohong', 3: 'xiaoming'}
5.对reduce的理解:
reduce(callback,initiaValue)会传入两个变量,回调函数(callback)和初始值(initiaValue)。
假设函数有个传入参数,prev和next。 prev和next是你必须要了解的。
当没有传入初始值时,prev是从数组中第一个元素开始的,next是第二个元素。
但是当传入初始值(initiaValue)后,第一个prev将是initivalValue,next将是数组中的第一个元素。
比如:
// 4.对reduce的理解:
var arr = ["apple","orange"];
function noPassValue(){
return arr.reduce(function(prev,next){
console.log("prev:",prev);
console.log("next:",next);
return prev;
});
}
function passValue(){
return arr.reduce(function(prev,next){
console.log("prev:",prev);
console.log("next:",next);
prev[next] = 1;
return prev;
},{});
}
console.log("No Additional parameter:",noPassValue());
console.log("----------------");
console.log("With {} as an additional parameter:",passValue());
/*
VM415673:4 prev: apple
VM415673:5 next: orange
VM415673:4 prev: apple
VM415673:5 next: orange
VM415673:19 No Additional parameter: apple
VM415673:20 ----------------
VM415673:13 prev: {}
VM415673:14 next: apple
VM415673:13 prev: {apple: 1}
VM415673:14 next: orange
VM415673:21 With {} as an additional parameter: {apple: 1, orange: 1}
*/
若有不足请多多指教!希望给您带来帮助!参考文献:链接