Как создать массив фиксированной длины?

  —  2 минуты

#web#javascript#theory#data
Читать статью в Telegram

На самом деле, способов множество. Можно создать простой массив пустых элементов:

javascript
1Array(100)
2

Но тогда будет проблема с тем, чтобы его заполнить. Решить её очень просто — можно просто заполнить массив через метод fill:

javascript
1Array(100).fill(0)
2

Или мы можем попробовать вызвать метод map и заполнить массив индексами:

javascript
1Array(100).map((_, index) => index)
2

Пробуйте угадать что получится в ходе выполнения кода выше

Ответ:

Получится [empty × 100], а не массив индексов)

Тут дело в том, что при вызове Array(100) у нас изначально создаётся "разряженный" массив. Это когда под каждый элемент массива даже память не выделяется.

Язык просто создаёт пустую структуру с полем length в значении 100

А что будет, если вызвать вот такой код?

javascript
1Object.keys(Array(100)).length
2

Ответ:

ноль, потому что значений в массиве по сути то и нет. Поэтому и map не работает

Поэтому если мы хотим использовать map, то придётся использовать вот такой хак:

javascript
1[...Array(100)].map((_, index) => index)
2

Такая конструкция уже превратит разряженный массив в массив из сотни undefined и позволит вызвать map

Мой любимый способ, который я использую всегда в подобных кейсах:

javascript
1Array.from({ length: 100 })
2

Мне так привычнее и синтаксически наиболее понятно. Да и ещё фишка в том, что вторым аргументом в from можно сразу передать функцию-маппер:

javascript
1Array.from({ length: 100 }, () => 'привет')
2

Ну или прям совсем в лоб, про такое тоже не забываем:

javascript
1const array = []
2
3for (let i = 0; i < 100; i++) {
4    array.push('progway')
5}
6

Статья была полезной?