实现一个reduce函数,作用和原生的reduce类似。
var reduce = function(arr, fn, initialValue) {
// 设置了初始值就取初始值,否则就取数组第一个元素
var result = typeof initialValue === 'undefined' ? arr[0] : initialValue;
// 设置了初始值,初始值就是第一个索引,否则数组第一个元素为第一个索引
var startPoint = typeof initialValue === 'undefined' ? 1 : 0;
arr.slice(startPoint)
.forEach(function(val, index) {
result = fn(result, val, index + startPoint, arr);
});
return result;
};
var sum = reduce([1, 2, 3], function(memo, num){
return memo + num
}, 0);
console.log(sum) //6
function reduce(arr, iteratee, initValue){
var tmpArr = (initValue === undefined ? [] : [initValue]).concat(arr)
while(tmpArr.length > 1){
tmpArr.splice(0, 2, iteratee(tmpArr[0], tmpArr[1]))
}
return tmpArr[0]
}
var sum = reduce([3,5], function(v1, v2){
return v1 * v2
},4)
console.log(sum)