fn: callback
initial: 初始值
Array.prototype.reduce(fn , initial)
用法举例:
var a = [1, 2, 3];
a.reduce(function (x , y) { return x + y}, 1); // 7
这个reduce( )可以用来实现用指定的函数对数组元素进行组合。可以设置初始值,不设置的话默认的会选择数组中的第一个元素作为初始值
这个方法针对IE < 9 的浏览器 的写一个兼容的方法,英文称作 Polyfill , 填充物
var reduce = Array.prototype.reduce // 判断浏览器是否支持 ES5 中的 reduce() 方法
? function(a, fn, initial) { // 支持的话 执行这段代码
if( arguments.length > 2) {
return a.reduce(fn, initial);
} else {
return a.reduce(fn);
}
}
: function(a, fn, initial) { //不支持的话执行以下代码
var i = 0, len = a.length, sum;
if(arguments > 2) {
//传了初始值 初始化 sum 值
sum = initial;
} else {
//没有传递初始值
//如果传递的是空数组直接抛出错误信息
if (a.len == 0) return new TypeError( a + 'can not be a empty array');
while( i < len) {
// 为了防止出现这种现象
// var arr = [1, 2, 3]; delete arr[0];
// 这样的话原数组 会变为 [1: 2, 2: 3]
if ( i in a) {
sum = a[i++]};
break;
}
//为了防止出项
//var arr = [1, 2, 3];
//delete arr[0];
//delete arr[1];
//delete arr[3];
//console.log(arr.length); *虽然数组为空 但是length值 仍然是 3*
if ( i == len) throw TypeError(a +'can not be a empty array');
}
while( i < len) {
if( i in a) { sum = fn.call(undefinde, sum, a[i], i, a); }
i++;
}
return sum;
}
代码中的`a[i++]` 是先为 `sum` 赋值为 `a[i]` 然后为`i = i + 1`;
`a[i++]` 可以理解为 不设置的话默认的会选择数组中的第一个元素作为初始值