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