Использование map () с функцией, имеющей два параметра - PullRequest
0 голосов
/ 27 июня 2018

Я знаю, что могу передать функцию, похожую на эту, в метод массива .map():

var cities = ["rome", "san francisco", "tokyo"];

var cityLen = cities.map(x => x.length);

console.log(cityLen)

// OUTPUT: [4, 13, 5]

Я передаю один параметр (x) анонимной функции в map, где x постепенно присваивается каждому из элементов cities.

В приведенном ниже коде были переданы два параметра (d и i) анонимной функции.

function numberRange (start, end) {
  return new Array(end - start).fill().map((d, i) => i + start);
}

numberRange(10, 20)

// OUTPUT [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

Какие параметры d и i находятся внутри анонимной функции и как они назначаются? Как функции с несколькими параметрами работают с .map()?

Ответы [ 2 ]

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

Помимо второго параметра, который обычно является индексом фактического элемента forEach, some, every, map, вы можете использовать Array.from, который генерирует массив из объекта со свойством длины и вторым параметром для функции отображения.

function numberRange (start, end) {
    return Array.from({ length: end - start}, (_, i) => i + start);
}

console.log(numberRange(10, 20));
0 голосов
/ 27 июня 2018

Как вы можете видеть в MDN , Array#map вызывается с тремя аргументами:

  • Текущее значение
  • Текущий индекс
  • Объект, на котором он назывался

Так что map вызываемый вызывается с каждым значением в массиве и его индексом (и массивом, но он не объявляет параметр для него).


Примечание: вы можете избежать ненужных многократных проходов через массив (в основном, объедините fill и map) с Array.from:

return Array.from({length: end - start}, (d, i) => i + start);

Array.from вызывает его обратный вызов с текущим значением и его индексом.

* 1 028 * Пример:

function numberRange (start, end) {
  return Array.from({length: end - start}, (d, i) => i + start);
}
console.log(numberRange(10, 20));

Вы также можете полностью отказаться от использования i, увеличив start:

return Array.from({length: end - start}, () => start++);
* +1040 * Пример: * * тысяча сорок один

function numberRange (start, end) {
  return Array.from({length: end - start}, () => start++);
}
console.log(numberRange(10, 20));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...