目录

  1. reduce的理解
    1. 基本概念
      1. 语法

转:
  JS进阶篇–JS数组reduce()方法详解及高级技巧
reduce函数

案例:

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
34
35
36
37
38
39
40
41
数组求和
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

合并二维数组
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"]

统计数组中有多少不重复的单词
// 不用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}

reduce的理解

  reduce(callback,initiaValue)会传入两个变量,回调函数(callback)和初始值(initiaValue)
假设函数有个传入参数,prevnextindexarrayPrevnext是你必须要了解的。
当没有传入初始值时,prev是从数组中第一个元素开始的,next是第二个函数。
但是当传入初始值(initiaValue)后,第一个prev将是initivalValuenext将是数组中的第一个元素。

基本概念

  reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。
  reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。

语法
1
arr.reduce(callback,[initialValue])

callback (执行数组中每个值的函数,包含四个参数)
  previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
  currentValue (数组中当前被处理的元素)
  index (当前元素在数组中的索引)
  array (调用 reduce 的数组)
  initialValue (作为第一次调用 callback 的第一个参数。)