проблема с переписыванием метода приведения js - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь переписать метод reduce.

У меня есть пара вещей, в которых я не уверен.Во-первых, это то, что это дает неправильный результат, который я не могу понять, почему.Во-вторых, если я не назначаю функцию reducez для const или let, возникает ошибка.

Следующий код выдает ошибку

Невозможночитать свойство '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 голосов
/ 01 февраля 2019
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...