自己实现一个reduce,reduce数组去重

1,250 阅读1分钟

数组中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' ]