定义:
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。对空数组是不会执行回调函数的。
1.数组求和
1
2
3
4
5
6
7
8
9
10
11
|
// 1.数组求和 var arr = [1,5,8,6,15,78,65,25,48,55]
var sum = arr.reduce( function (total,currentValue){
return total+currentValue;
}); console.log(sum); //306
var eachSum = 0;
arr.forEach( function (currentValue){
eachSum += currentValue;
}) console.log(eachSum); //306
|
2.合并二维数组
1
2
3
4
5
6
7
|
//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.统计一个数组中有多少个不重复的单词:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//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.对reduce的理解:
reduce(callback,initiaValue)会传入两个变量,回调函数(callback)和初始值(initiaValue)。
假设函数有个传入参数,prev和next,index和array。 Prev和next是你必须要了解的。
当没有传入初始值时,prev是从数组中第一个元素开始的,next是第二个函数。
但是当传入初始值(initiaValue)后,第一个prev将是initivalValue,next将是数组中的第一个元素。
比如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
// 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 |