介绍
- 对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。
语法
1 | array1.reducer(callbackfn[, initalValue1]) |
参数
参数 | 定义
—|—|—
array1 | 必须。一个数组对象
callbackfn | 必须。一个接受最多四个参数的函数。对于数组中的每个元素,reduce 方法都会调用callbackfn 函数一次
initialValue | 可选。如果指定initialValue, 则它将用作初始值来启动累积。第一次调用callbackfn 函数会将此值作为参数而非数组值提供。
返回值
- 通过最后一次调用回调函数获得的累积结果。
异常
- 当满足下列任一条件时,将引发
TypeError
异常callbackfn
参数不是函数对象- 数组不包含元素,且未提供
initialValue
备注
- 如果提供了
initialValue
,则reduce
方法会对数组中的每个元素调用一次callbackfn
函数(按升序索引顺序)。如果未提供initialValue
,则reduce
方法会对第二个元素开始的每个元素调用callbackfn
函数。 - 回调函数的返回值在下一次调用回调函数时作为
previousValue
参数提供。最后一次调用回调函数获得的返回值为reduce` 方法的返回值。 - 不为数组中缺少的元素调用该回调函数。
回调函数语法
- 回调函数的语法如下:
1
function callbackfn(previousValue, currentValue, currentIndex, array1)
回调参数 | 定义
—|—|—
previousValue | 通过上一次调用回到函数获得的值。如果向reduce
方法提供initialValue
,则在首次调用函数时,previousValue
为initalValue
currentValue | 当期数组元素的值
currentIndex | 当前数组元素的数字索引
array1 | 包含该元素的数组对象
示例
- 下面的示例将数组值连接成字符串,各个值用“::”分割开。由于未向
reduce
方法提供初值,第一次调用回调函数时会将”abc” 作为previousValue
参数并将“def”作为currentValue
参数。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// Define the callback function.
function appendCurrent (previousValue, currentValue) {
return previousValue + "::" + currentValue;
}
// Create an array.
var elements = ["abc", "def", 123, 456];
// Call the reduce method, which calls the callback function
// for each array element.
var result = elements.reduce(appendCurrent);
document.write(result);
// Output:
// abc::def::123::456 - 统计一个数组中有多少个不同的单词
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// Define the callback function.
function getWordCount (previousValue, currentValue) {
previousValue[currentValue] = (previousValue[currentValue] + 1) || 1;
return previousValue;
}
// Create an array.
var elements = ["apple", "orange", "apple", "orange", "pear", "orange"];
// Call the reduce method, which calls the callback function
// for each array element.
var result = elements.reduce(appendCurrent, {});
console.log(result);
// Output:
// {apple: 2, orange: 3, pear: 1}