Для работы с наборами данных предназначены массивы. Для создания массива применяются квадратные скобки []. Внутри квадратных скобок определяются элементы массива. (Далее в отдельной главе, посвященной массивам, мы рассмотрим дополнительные способы создания массивов и вцелом более подробно работу с массивами)
Простейшее определение массива:
const myArray = [];
В данном случае мы создаем массив, который называется myArray
. Он пустой, поскольку внутри квадратных скобок не определено ни одного элемента.
Но можно также добавить в него начальные данные:
const people = ["Tom", "Alice", "Sam"]; console.log(people); // ["Tom", "Alice", "Sam"];
В этом случае в массиве myArray будет три элемента. Графически его можно представить так:
Индекс | Элемент |
0 | Tom |
1 | Alice |
2 | Sam |
Для обращения к отдельным элементам массива используются индексы. Отсчет начинается с нуля, то есть первый элемент будет иметь индекс 0, а последний - 2:
const people = ["Tom", "Alice", "Sam"]; console.log(people[0]); // Tom const person3 = people[2]; // Sam console.log(person3); // Sam
Если мы попробуем обратиться к элементу по индексу больше размера массива, то мы получим undefined:
const people = ["Tom", "Alice", "Sam"]; console.log(people[7]); // undefined
Также по индексу осуществляется установка значений для элементов массива:
const people = ["Tom", "Alice", "Sam"]; console.log(people[0]); // Tom people[0] = "Bob"; console.log(people[0]); // Bob
Причем в отличие от других языков, как C# или Java, можно установить элемент, который изначально не установлен:
const people = ["Tom", "Alice", "Sam"]; console.log(people[7]); // undefined - в массиве только три элемента people[7] = "Bob"; console.log(people[7]); // Bob
Также стоит отметить, что в отличие от ряда языков программирования в JavaScript массивы не являются строго типизированными, один массив может хранить данные разных типов:
const objects = ["Tom", 12, true, 3.14, false]; console.log(objects);
Массивы могут быть одномерными и многомерными. Каждый элемент в многомерном массиве может представлять собой отдельный массив. Выше мы рассматривали одномерный массив, теперь создадим многомерный массив:
const numbers1 = [0, 1, 2, 3, 4, 5 ]; // одномерный массив const numbers2 = [[0, 1, 2], [3, 4, 5] ]; // двумерный массив
Визуально оба массива можно представить следующим образом:
0 | 1 | 2 | 3 | 4 | 5 |
0 | 1 | 2 |
3 | 4 | 5 |
Поскольку массив numbers2 двухмерный, он представляет собой простую таблицу. Каждый его элемент может представлять отдельный массив.
Рассмотрим еще один двумерный массив:
const people = [ ["Tom", 25, false], ["Bill", 38, true], ["Alice", 21, false] ]; console.log(people[0]); // ["Tom", 25, false] console.log(people[1]); // ["Bill", 38, true]
Массив people можно представить в виде следующей таблицы:
Tom | 25 | false |
Bill | 38 | true |
Alice | 21 | false |
Чтобы получить отдельный элемент массива, также используется индекс:
const tomInfo = people[0];
Только теперь переменная tomInfo
будет представлять массив. Чтобы получить элемент внутри вложенного массива, нам надо использовать его вторую размерность:
console.log("Имя: ", people[0][0]); // Tom console.log("Возраст: ", people[0][1]); // 25
То есть если визуально двумерный массив мы можем представить в виде таблицы, то элемент people[0][1]
будет ссылаться на ячейку таблицы,
которая находится на пересечении первой строки и второго столбца (первая размерность - 0 - строка, вторая размерность - 1 - столбец).
Также мы можем выполнить присвоение:
const people = [ ["Tom", 25, false], ["Bill", 38, true], ["Alice", 21, false] ]; people[0][1] = 56; // присваиваем отдельное значение console.log(people[0][1]); // 56 people[1] = ["Bob", 29, false]; // присваиваем массив console.log(people[1][0]); // Bob
При создании многомерных массивов мы не ограничены только двумерными, но также можем использовать массивы больших размерностей:
const numbers = []; numbers[0] = []; // теперь numbers - двумерный массив numbers[0][0]=[]; // теперь numbers - трехмерный массив numbers[0][0][0] = 5; // первый элемент трехмерного массива равен 5 console.log(numbers[0][0][0]);