красноречивый javascript глава 5 массив уменьшить - PullRequest
0 голосов
/ 25 июня 2018

Я пытался выяснить, как count определяется как 0 в методе Reduce, а затем используется в функции. Есть ли кто-нибудь, кто мог бы описать, как этот код работает шаг за шагом? Спасибо!

let ranges = [[125184, 125259], [125264, 125274], [125278, 125280]];

    console.log(

      ranges.reduce((count, [from, to]) => {
          return count + (to - from);
        }, 0)

  );

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

let ranges = [[125184, 125259], [125264, 125274], [125278, 125280]];

    console.log(

      ranges.reduce((count, [from, to]) => {    // count gets 0 initially
      console.log('count->', count, 'from->', from, 'to->', to)
          return count + (to - from);
        }, 0)              // passing initial value to count

  );

Итак, изначально count получает 0 в качестве значения по умолчанию, которое вы передали.После этого начальный счетчик вызовов будет содержать все, что возвращает функция (см. Журнал внутри .reduce()).

Массив, для которого вы вызываете reduce(), представляет собой array, содержащий array длины два.Итак, второй параметр - это массив длины два ([from, to]), потому что .reduce() будет итерировать по нему один за другим и получать эти внутренние массивы.Теперь эти массивы будут деструктурированы с использованием array destructuring assgnment и будут собраны в переменные from и to.

Итак, на первой итерации вы добавляете разность внутреннего массива (to - from) к 0 и возвращаете его.Для второй итерации все, что вы вернули из first (75), будет значением переменной count и т. Д.

Подробнее о .reduce() можно прочитать здесь .

0 голосов
/ 25 июня 2018

Простое объяснение состоит в том, что отсчет от (count, [from, to]) является накопленным значением, и мы определяем начальное значение как второй параметр reduce method

let initialValue = 0;//Or whatever value
console.log(

  ranges.reduce((count, [from, to]) => {
      return count + (to - from);
    }, initialValue);

);

0 голосов
/ 25 июня 2018

Вы явно инициализируете его последним аргументом для уменьшения. Измените этот ноль на что-то другое, и вы увидите изменения в выходных данных.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

...