Как создать массив чисел от 1 до N в JavaScript? (простой способ)
Лучший способ: Array.from() с map-функцией
Самый популярный и элегантный способ в современном JavaScript — использовать Array.from() с функцией отображения. Чтобы получить массив от 1 до N, а не от 0 до N-1, просто добавьте +1 к индексу:
const N = 5;
const arr = Array.from({ length: N }, (_, i) => i + 1);
console.log(arr); // [1, 2, 3, 4, 5]
Здесь { length: N } — это псевдомассив (объект с длиной), а второй аргумент — функция, которая вызывается для каждого индекса. Параметр _ (или v) — это значение элемента (оно не нужно), а i — индекс (0, 1, 2, ...). Мы возвращаем i + 1.
Альтернативный классический способ: spread-оператор + keys()
Если вы не любите Array.from, можно использовать комбинацию Array(), keys() и spread-оператора:
const N = 5;
const arr = [...Array(N).keys()].map(i => i + 1);
console.log(arr); // [1, 2, 3, 4, 5]
Пошагово:
Array(N)— создаёт массив из N пустых элементов..keys()— возвращает итератор индексов (0, 1, ..., N-1).[...итератор]— превращает итератор в массив чисел [0, 1, 2, 3, 4]..map(i => i + 1)— сдвигает на 1.
Ещё один вариант: Array.fill() + map()
const N = 5;
const arr = Array(N).fill().map((_, i) => i + 1);
console.log(arr); // [1, 2, 3, 4, 5]
Метод fill() нужен, чтобы превратить "дырявый" массив в нормальный, иначе map() не пройдётся по пустым элементам.
Сравнение производительности
Для массивов до 100 000 элементов разница незаметна. Для больших массивов (миллионы элементов) Array.from() работает быстрее, чем Array(N).fill().map(), но в реальных проектах редко нужны такие объёмы.
Важный совет для новичков
Не забывайте, что все эти методы создают новый массив. Если N очень большой, это может занять память. Для генерации последовательности "на лету" (без хранения всего массива) используйте генераторы:
function* range(start, end) {
for (let i = start; i <= end; i++) {
yield i;
}
}
const arr = [...range(1, 5)]; // [1, 2, 3, 4, 5]
Но для повседневных задач Array.from() — самый простой и читаемый вариант.
Альтернативный ответ: функция-помощник range()
Если вы часто создаёте массивы с числами, удобно написать свою маленькую утилиту — функцию range(), как в Python:
function range(start, end, step = 1) {
const arr = [];
if (step > 0) {
for (let i = start; i <= end; i += step) arr.push(i);
} else {
for (let i = start; i >= end; i += step) arr.push(i);
}
return arr;
}
// Использование:
console.log(range(1, 5)); // [1, 2, 3, 4, 5]
console.log(range(1, 10, 2)); // [1, 3, 5, 7, 9]
console.log(range(5, 1, -1)); // [5, 4, 3, 2, 1]
Этот подход более гибкий: вы можете задать шаг и направление. Для простого случая "от 1 до N" можно сделать короткую версию:
const rangeToN = (n) => Array.from({length: n}, (_, i) => i + 1);
console.log(rangeToN(5)); // [1, 2, 3, 4, 5]
Но имейте в виду: встроенные методы работают быстрее, чем ручной цикл с push(). Для массивов больше 10 000 элементов используйте Array.from().
Ответов пока нет.
Войдите чтобы оставить ответ