Как создать массив фиксированной длины?
— 2 минуты
На самом деле, способов множество. Можно создать простой массив пустых элементов:
javascript1Array(100) 2
Но тогда будет проблема с тем, чтобы его заполнить. Решить её очень просто — можно просто заполнить массив через метод fill:
javascript1Array(100).fill(0) 2
Или мы можем попробовать вызвать метод map и заполнить массив индексами:
javascript1Array(100).map((_, index) => index) 2
Пробуйте угадать что получится в ходе выполнения кода выше
Ответ:
Получится [empty × 100], а не массив индексов)
Тут дело в том, что при вызове Array(100) у нас изначально создаётся "разряженный" массив. Это когда под каждый элемент массива даже память не выделяется.
Язык просто создаёт пустую структуру с полем length в значении 100
А что будет, если вызвать вот такой код?
javascript1Object.keys(Array(100)).length 2
Ответ:
ноль, потому что значений в массиве по сути то и нет. Поэтому и map не работает
Поэтому если мы хотим использовать map, то придётся использовать вот такой хак:
javascript1[...Array(100)].map((_, index) => index) 2
Такая конструкция уже превратит разряженный массив в массив из сотни undefined и позволит вызвать map
Мой любимый способ, который я использую всегда в подобных кейсах:
javascript1Array.from({ length: 100 }) 2
Мне так привычнее и синтаксически наиболее понятно. Да и ещё фишка в том, что вторым аргументом в from можно сразу передать функцию-маппер:
javascript1Array.from({ length: 100 }, () => 'привет') 2
Ну или прям совсем в лоб, про такое тоже не забываем:
javascript1const array = [] 2 3for (let i = 0; i < 100; i++) { 4 array.push('progway') 5} 6
Статья была полезной?
Читайте также:
— 2 минуты
Что такое Server-Sent Events
SSE — это технология для однонаправленного соединения между сервером и клие...
— 4 минуты
Связываем React и localStorage через useSyncExternalStore
Как согласовать изменение состояния в реакте и поля в localStorage? До нед...
— 3 минуты
Теги для шаблонных строк
В JavaScript есть, как по мне, крайне странный синтаксис. Самым очевидным е...