Объекты позволяют хранить данные со строковыми ключами. Это замечательно.
Но довольно часто мы понимаем, что нам необходима упорядоченная коллекция данных, в которой присутствуют 1-й, 2-й, 3-й элементы и т.д. Например, она понадобится нам для хранения списка чего-либо: пользователей, товаров, элементов HTML и т.д.
В этом случае использовать объект неудобно, так как он не предоставляет методов управления порядком элементов. Мы не можем вставить новое свойство «между» уже существующими. Объекты просто не предназначены для этих целей.
Для хранения упорядоченных коллекций существует особая структура данных, которая называется массив, Array
.
Объявление
Существует два варианта синтаксиса для создания пустого массива:
let arr = new Array();
let arr = [];
Практически всегда используется второй вариант синтаксиса. В скобках мы можем указать начальные значения элементов:
let fruits = ["Яблоко", "Апельсин", "Слива"];
Элементы массива нумеруются, начиная с нуля.
Мы можем получить элемент, указав его номер в квадратных скобках:
let fruits = ["Яблоко", "Апельсин", "Слива"];
console.log( fruits[0] ); // Яблоко
console.log( fruits[1] ); // Апельсин
console.log( fruits[2] ); // Слива
Мы можем заменить элемент:
fruits[2] = 'Груша'; // теперь ["Яблоко", "Апельсин", "Груша"]
…Или добавить новый к существующему массиву:
fruits[3] = 'Лимон'; // теперь ["Яблоко", "Апельсин", "Груша", "Лимон"]
Общее число элементов массива содержится в его свойстве length
:
let fruits = ["Яблоко", "Апельсин", "Слива"];
alert( fruits.length ); // 3
Вывести массив целиком можно при помощи console.log
.
let fruits = ["Яблоко", "Апельсин", "Слива"];
console.log( fruits ); // Яблоко, Апельсин, Слива
В массиве могут храниться элементы любого типа.
Например:
// разные типы значений
let arr = [ 'Яблоко', { name: 'Джон' }, true, function() { console.log('привет'); } ];
// получить элемент с индексом 1 (объект) и затем показать его свойство
console.log( arr[1].name ); // Джон
// получить элемент с индексом 3 (функция) и выполнить её
arr[3](); // привет
Висячая запятая
Список элементов массива, как и список свойств объекта, может оканчиваться запятой:
let fruits = [
"Яблоко",
"Апельсин",
"Слива",
];
«Висячая запятая» упрощает процесс добавления/удаления элементов, так как все строки становятся идентичными.
Методы pop/push, shift/unshift
Очередь – один из самых распространённых вариантов применения массива. В области компьютерных наук так называется упорядоченная коллекция элементов, поддерживающая два вида операций:
push
добавляет элемент в конец.shift
удаляет элемент в начале, сдвигая очередь, так что второй элемент становится первым.
Массивы поддерживают обе операции.
На практике необходимость в этом возникает очень часто. Например, очередь сообщений, которые надо показать на экране.
Существует и другой вариант применения для массивов – структура данных, называемая стек.
Она поддерживает два вида операций:
push
добавляет элемент в конец.pop
удаляет последний элемент.
Таким образом, новые элементы всегда добавляются или удаляются из «конца».
Примером стека обычно служит колода карт: новые карты кладутся наверх и берутся тоже сверху:
Массивы в JavaScript могут работать и как очередь, и как стек. Мы можем добавлять/удалять элементы как в начало, так и в конец массива.
В компьютерных науках структура данных, делающая это возможным, называется двусторонняя очередь.
Методы, работающие с концом массива:
pop
Удаляет последний элемент из массива и возвращает его:
let fruits = ["Яблоко", "Апельсин", "Груша"];
console.log( fruits.pop() ); // удаляем "Груша" и выводим его
console.log( fruits ); // Яблоко, Апельсин
push
Добавляет элемент в конец массива:
let fruits = ["Яблоко", "Апельсин"];
fruits.push("Груша");
console.log( fruits ); // Яблоко, Апельсин, Груша
Вызов fruits.push(...)
равнозначен fruits[fruits.length] = ...
.
Методы, работающие с началом массива:
shift
Удаляет из массива первый элемент и возвращает его:
let fruits = ["Яблоко", "Апельсин", "Груша"];
console.log( fruits.shift() ); // удаляем Яблоко и выводим его
console.log( fruits ); // Апельсин, Груша
unshift
Добавляет элемент в начало массива:
let fruits = ["Апельсин", "Груша"];
fruits.unshift('Яблоко');
console.log( fruits ); // Яблоко, Апельсин, Груша
Методы push
и unshift
могут добавлять сразу несколько элементов:
let fruits = ["Яблоко"];
fruits.push("Апельсин", "Груша");
fruits.unshift("Ананас", "Лимон");
// ["Ананас", "Лимон", "Яблоко", "Апельсин", "Груша"]
console.log( fruits );