Заполнение массивов через цикл в JavaScript

Пусть у нас есть какой-то массив:

let arr = [];

Давайте заполним этот массив какими-нибудь элементами. Можно сделать это вот так:

let arr = [1, 2, 3, 4, 5];

А можно изначально создать массив пустым, а затем добавить в него данные вот так:

let arr = []; arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4; arr[4] = 5;

Объявите пустой массив, а затем заполните его числами от 1 до 10.

Объявите пустой массив, а затем заполните его 5-ю буквами x.

Заполнение массива в цикле

Пусть мы заполняем массив вот таким образом:

let arr = []; arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4; arr[4] = 5;

Очевидно, что данный способ не очень удобен, особенно если элементов в массиве очень много.

Давайте перепишем наш код так, чтобы заполнением массива занимался цикл for:

let arr = []; for (let i = 0; i <= 4; i++) { arr[i] = i + 1; } console.log(arr);

С помощью цикла заполните массив числами от 1 до 100.

Проблема пропусков

Пусть мы вот так заполняем наш массив:

let arr = []; arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4; arr[4] = 5;

Пусть теперь мы ключи массива будем указывать не по порядку, а с пропусками:

let arr = []; arr[0] = 1; arr[4] = 5;

В этом случае нас ждет проблема: пропущенные элементы все равно будут присутствовать в массиве, просто их значение будет undefined:

[1, undefined, undefined, undefined, 5]

Это станет проблемой, к примеру, при переборе массива циклом for-of:

for (let elem of arr) { console.log(elem); // выведет 1, undefined, undefined, undefined, 5 }

Также свойство length будет показывать некорректное значение:

console.log(arr.length); // выведет 5, хотя мы вроде как добавили лишь 2 элемента

Как вы уже должны знать, такие массивы с пропусками называются разреженными.

Учтите, что console.log и alert не показывают в явном виде то, что пропущенные элементы равны undefined:

let arr = []; arr[0] = 1; arr[4] = 5; console.log(arr); // выведет структуру массива в виде [1, undefined × 3, 5] alert(arr); // выведет структуру массива в виде 1,'','','',5

Заполнение значениями не по порядку

Пусть мы хотим в цикле заполнить массив значениями не по порядку. К примеру, мы хотим записать в массив все четные числа в промежутке от 2 до 100.

Для того, чтобы цикл перебирал четные числа, нам придется в каждой итерации увеличивать счетчик цикла на 2. Из-за этого массив получится с пропусками:

let arr = []; for (let i = 2; i <= 100; i += 2) { arr[i] = i; } console.log(arr); // массив получится с пропусками

Для решения проблемы можно просто ввести два счетчика: счетчик i пусть отсчитывает четные числа, а счетчик j - итерации цикла для использования в ключах массива:

let arr = []; for (let i = 2, j = 0; i <= 100; i += 2, j++) { arr[j] = i; } console.log(arr);

С помощью цикла заполните массив нечетными числами в промежутке от 1 до 99.