数组中reduce根据传递的回调函数和初始化返回对应的结果
MDN中的描述
reduce为数组中的每一个元素依次执行callback函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:
- accumulator 累计器
- currentValue 当前值
- currentIndex 当前索引
- array 数组
//将自己实现的reduce命名为_reduce
Array.prototype._reduce = function(callback, init) {
if(typeof callback !== 'function')
return new TypeError('callback need a function');
// 得到调用的数组
var arr = this;
// 如果没有传递过来,初始只就为数组的第一个值
var accumulator = typeof init === 'undefined' ? arr[0] : init;
// 如果有初始化就从0开始,没有初始化索引从1开始
var start = typeof init === 'undefined' ? 1 : 0;
for (var i = start; i < arr.length; i++) {
accumulator = callback(accumulator, arr[i], i, arr);
}
// 返回结果
return accumulator
}
//测试,数组去重
// 数组去重
let myArray = ['a', 'b', 'a', 'b', 'c', 'e', 'e', 'c', 'd', 'd', 'd', 'd']
var res = myArray._reduce((res,curr) => {
if(res.indexOf(curr) < 0){
res.push(curr)
}
return res;
},[]);
console.log(res); // [ 'a', 'b', 'c', 'e', 'd' ]