重写reduce方法js

时间:2019-02-01 15:46:30

标签: javascript ecmascript-6

我正在尝试重写reduce方法。

我不确定两件事。首先,是它给出了错误的结果,我不知道为什么。其次,如果我没有将reducez函数分配给constlet,则会出现错误。

以下代码给出了错误

  

无法读取未定义的属性'reducuez'

有人知道这是为什么吗?

[1, 2, 3].reducuez((a, b) => {
    return a + b;
});

这是我尝试编写reduce方法的实际代码。

Array.prototype.reducuez = function(callback) {
  let initialValue = 0;
  for (let i = 0; i < this.length; i++) {
    initialValue += callback(this[i], initialValue)
  }
  return initialValue;
}

const y = [1, 2, 3].reducuez((a, b) => {
  return a + b;
});

console.log(y); // this is 11, should be 6

1 个答案:

答案 0 :(得分:2)

initialValue += callback(this[i], initialValue)

应该是

initialValue = callback(this[i], initialValue)

因为当您在每个回调之后附加值时,initalValue的值会在回调中添加两次,而由于+ =

Array.prototype.reducuez = function(callback) {
  let initialValue = 0;
  for (let i = 0; i < this.length; i++) {
    initialValue = callback(this[i], initialValue)
  }
  return initialValue;
}

const y = [1, 2, 3].reducuez((a, b) => {
  return a + b;
});

console.log(y); // this is 11, should be 6