Пусть у нас есть какой-то массив:
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.