JS создать массив с функцией стрелки и остальными параметрами - PullRequest
0 голосов
/ 01 августа 2020

В одном приложении я видел эту часть кода:

const arrayCreate = length => [...Array(length)];

Он работает, но я не уверен, как это сделать. У нас есть стрелочная функция, которая принимает параметр длины и создает массив в массиве или что? :) А что тут делает оператор спреда?

Ответы [ 3 ]

1 голос
/ 01 августа 2020

Array(length) создаст массив из length пустых слотов, для которых, однако, вы не можете сопоставить или выполнить итерацию с использованием таких методов массива, как .map .forEach et c.

Когда вы spread (...) массив с пустыми слотами, он создаст новый массив с undefined для каждой позиции массива. Итак, теперь вы можете .map и .forEach, потому что они не являются пустыми слотами.

Итак, это способ создать массив из length, заполненный undefined.

Вы можно сделать то же самое с

Array(length).fill()

или

Array.from(Array(length))
0 голосов
/ 01 августа 2020

Сообщение @ Gabrielse довольно хорошо отвечает на вопрос. Однако есть еще одна вещь, которую я хотел бы добавить к нему.

Один вариант использования, в котором вы можете сделать что-то вроде , это когда у вас есть set итерация и вам нужны его элементы внутри массива. например,

const set = new Set();
set.add('foo');
set.add('bar');
set.add('baz');

Предположим, у вас есть элементы foo, bar, baz в наборе. Простой console.log(set); даст Set { 'foo', 'bar', 'baz' }. Результат, который вы получите, конечно же, - это набор. Но что, если вы хотите, чтобы эти элементы были в массиве?

Простой способ сделать это - использовать ... (оператор распространения), примененный к set внутри массива. Результатом console.log([...set]); будет [ 'foo', 'bar', 'baz' ].

.
0 голосов
/ 01 августа 2020

Интересно! Разработчик, который сделал это, вероятно, хотел оптимизировать производительность при записи первого значения в индекс или иметь возможность перебирать пустые значения

Массив - это объект javascript, который имеет:

  • пары ключ / значение, присвоенные соответственно индексу / значению массива по индексу
  • длина (размер массива)
  • прототип (геттеры, сеттеры, методы массива ...)

Array(length) или new Array(length) возвращает { length: 0, prototype: {} }. Объект пуст, его длина равна переданному в length

Теперь [...Array(length)] вернет { 0: undefined, 1: undefined, 2: undefined: 3: undefined, 4: undefined, 5: undefined, length: 5, prototype: {} }. Теперь свойствам присвоены их undefined значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...