1. reduce你不知道的事情
- 语法
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
| total | 必需。初始值, 或者计算结束后的返回值。 |
|---|---|
| currentValue | 必需。当前元素 |
| currentIndex | 可选。当前元素的索引 |
| arr | 可选。当前元素所属的数组对象即array。 |
| 如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引,即执行array.length-1次循环。默认值取第0个array | |
| 如果提供initialValue,从索引0开始。即执行array.length次循环 |
-
求数组项之和
var sum = arr.reduce(function (prev, cur) {
return prev + cur;
},0);
由于传入了初始值0,所以开始时prev的值为0,cur的值为数组第一项3,相加之后返回值为3作为下一轮回调的prev值,然后再继续与下一个数组项相加,以此类推,直至完成所有数组项的和并返回。
-
求数组项最大值
var max = arr.reduce(function (prev, cur) {
return Math.max(prev,cur);
});
由于未传入初始值,所以开始时prev的值为数组第一项3,cur的值为数组第二项9,取两值最大值后继续进入下一轮回调。
-
数组去重
var newArr = arr.reduce(function (prev, cur) {
prev.indexOf(cur) === -1 && prev.push(cur);
return prev;
},[]);