前端手写(十三)——手写数组reduce

一、写在前面
reduce方法存在两个参数,第一个参数是回调函数,第二个参数是初始值。
回调函数中可以传入四个参数。并且如果初始值没有传,则将数组的第一个值作为init,此时就应该从第二个开始遍历。
二、手写reduce

Array.prototype.myReduce = function (callback, initValue) {
  if (!Array.isArray(this)) throw new TypeError('this is not an array')
  if (typeof callback !== 'function') throw new TypeError(callback + ' is not an function')
  let startIndex = initValue ? 0 : 1
  let acc = initValue || this[0]
  for (let i = startIndex; i < this.length; i++) {
    let cur = this[i]
    acc = callback(acc, cur, i, this)
  }
  return acc
}

你可能感兴趣的:(js面试题,js,数组,reduce)