Вступление
array в JavaScript - это тип глобального объекта, который используется для хранения данных. Массивы состоят из упорядоченной коллекции или списка, содержащего ноль или более типов данных, и используют пронумерованные индексы, начиная с0, для доступа к определенным элементам.
Массивы очень полезны, поскольку они хранят несколько значений в одной переменной, что может сгущать и упорядочивать наш код, делая его более читаемым и обслуживаемым. Массивы могут содержать любыеdata type, включаяnumbers,strings иobjects.
Чтобы продемонстрировать, как массивы могут быть полезны, рассмотрите возможность присвоения пяти океанам мира их собственным переменным.
oceans.js
// Assign the five oceans to five variables
const ocean1 = "Pacific";
const ocean2 = "Atlantic";
const ocean3 = "Indian";
const ocean4 = "Arctic";
const ocean5 = "Antarctic";
Этот метод очень многословен и может быстро стать сложным в обслуживании и отслеживании.
Используя массивы, мы можем упростить наши данные.
oceans.js
// Assign the five oceans
let oceans = [
"Pacific",
"Atlantic",
"Indian",
"Arctic",
"Antarctic",
];
Вместо того, чтобы создавать пять отдельных переменных, теперь у нас есть одна переменная, которая содержит все пять элементов. Мы использовали квадратные скобки -[] - для создания массива.
Чтобы получить доступ к определенному элементу, добавьте его индекс к переменной.
// Print out the first item of the oceans array
oceans[0];
OutputPacific
В этом уроке мы научимся создавать массивы; как они индексируются; как добавлять, изменять, удалять или получать доступ к элементам в массиве; и как перебрать массивы.
Создание массива
Есть два способа создать массив в JavaScript:
-
Литерал массива, который использует квадратные скобки.
-
Конструктор массива, использующий ключевое слово
new.
Давайте продемонстрируем, как создать массив видов акул, используя литерал массива, который инициализируется[].
sharks.js
// Initialize array of shark species with array literal
let sharks = [
"Hammerhead",
"Great White",
"Tiger",
];
Теперь вот те же данные, созданные с помощью конструктора массива, который инициализируетсяnew Array().
sharks.js
// Initialize array of shark species with array constructor
let sharks = new Array(
"Hammerhead",
"Great White",
"Tiger",
);
Оба метода создадут массив. Однако метод литерала массива (квадратные скобки) является гораздо более распространенным и предпочтительным, поскольку метод конструктораnew Array() может иметь несоответствия и неожиданные результаты. Полезно знать о конструкторе массива на случай, если вы столкнетесь с ним в дальнейшем.
Мы можем распечатать весь массив, который будет отображать то же, что и наш ввод.
// Print out the entire sharks array
sharks;
Output[ 'Hammerhead', 'Great White', 'Tiger' ]
Массивы часто используются для группировки списков схожих типов данных, но технически они могут содержать любое значение или набор значений, включая другие массивы.
// Initialize array of mixed datatypes
let mixedData = [
"String",
null,
7,
[
"another",
"array",
],
];
После создания массива мы можем манипулировать ими различными способами, но сначала мы должны понять, как индексируются массивы.
[.note] #Note: Вы можете увидеть последний элемент в массиве с последней запятой или без нее. Это известно какtrailing comma. Обычно их пропускают, но, как правило, их предпочтительно включать в код, поскольку это делает различия в системе контроля версий более понятными и упрощает добавление и удаление элементов без ошибок. Обратите внимание, что конечные запятые не допускаются вJSON files.
#
Индексирование массивов
Если вы узнали оindexing and manipulating strings in JavaScript, возможно, вы уже знакомы с концепцией индексирования массивов, поскольку строка похожа на массив.
Массивы не имеют пар имя / значение. Вместо этого они индексируются целочисленными значениями, начинающимися с0. Вот пример массива, назначенногоseaCreatures.
seacreatures.js
let seaCreatures = [
"octopus",
"squid",
"shark",
"seahorse",
"starfish",
];
Вот разбивка того, как индексируется каждый элемент в массивеseaCreatures.
| осьминог | Кальмар | акула | морской конек | морская звезда |
|---|---|---|---|---|
0 |
1 |
2 |
3 |
4 |
Первым элементом массива являетсяoctopus, который индексируется как0. Последним элементом являетсяstarfish, который индексируется в4. Подсчет начинается с0 в индексах, что противоречит нашей естественной интуиции начинать отсчет с 1, поэтому следует помнить об этом с особой осторожностью, пока это не станет естественным.
Узнать, сколько элементов в массиве, можно с помощью свойстваlength.
seaCreatures.length;
Output5
Хотя индексыseaCreatures состоят от0 до4, свойствоlength будет выводить фактическое количество элементов в массиве, начиная с 1.
Если мы хотим узнать порядковый номер определенного элемента в массиве, напримерseahorse, мы можем использовать методindexOf().
seaCreatures.indexOf("seahorse");
Output3
Если номер индекса не найден, например, для несуществующего значения, консоль вернет-1.
seaCreatures.indexOf("cuttlefish");
Output-1
С индексами, которые соответствуют элементам в массиве, мы можем получить доступ к каждому элементу дискретно, чтобы работать с этими элементами.
Доступ к элементам в массиве
Доступ к элементу в массиве JavaScript осуществляется путем обращения к номеру индекса элемента в квадратных скобках.
seaCreatures[1];
Outputsquid
Мы знаем, что0 всегда будет выводить первый элемент в массиве. Мы также можем найти последний элемент в массиве, выполнив операцию над свойствомlength и применив его как новый номер индекса.
const lastIndex = seaCreatures.length - 1;
seaCreatures[lastIndex];
Outputstarfish
Попытка получить доступ к несуществующему элементу вернетundefined.
seaCreatures[10];
Outputundefined
Чтобы получить доступ к элементам во вложенном массиве, вы должны добавить еще один индекс, соответствующий внутреннему массиву.
let nestedArray = [
[
"salmon",
"halibut",
],
[
"coral",
"reef",
]
];
nestedArray[1][0];
Outputcoral
В приведенном выше примере мы обращались к массиву в позиции1 переменнойnestedArray, а затем к элементу в позиции0 во внутреннем массиве.
Добавление элемента в массив
В нашей переменнойseaCreatures у нас было пять элементов, которые состояли из индексов от0 до4. Если мы хотим добавить новый элемент в массив, мы можем присвоить значение следующему индексу.
seaCreatures[5] = "whale";
seaCreatures;
Output[ 'octopus',
'squid',
'shark',
'seahorse',
'starfish',
'whale' ]
Если мы добавим элемент и случайно пропустим индекс, он создаст неопределенный элемент в массиве.
seaCreatures[7] = "pufferfish";
seaCreatures;
Output[ 'octopus',
'squid',
'shark',
'seahorse',
'starfish',
'whale',
,
'pufferfish' ]
Попытка получить доступ к дополнительному элементу массива вернетundefined.
seaCreatures[6]
Outputundefined
Подобных проблем можно избежать, используя методpush(), который добавляет элемент в конец массива.
// Append lobster to the end of the seaCreatures array
seaCreatures.push("lobster");
seaCreatures;
Output[ 'octopus',
'squid',
'shark',
'seahorse',
'starfish',
,
'whale',
'pufferfish',
'lobster' ]
На другом конце спектра методunshift() добавит элемент в начало массива.
// Append dragonfish to the beginning of the seaCreatures array
seaCreatures.unshift("dragonfish");
seaCreatures;
Output[ 'dragonfish',
'octopus',
'squid',
'shark',
'seahorse',
'starfish',
'whale',
,
'pufferfish',
'lobster' ]
Междуpush() иunshift() вы сможете добавлять элементы в начало и конец массива.
Удаление элемента из массива
Когда мы хотим удалить определенный элемент из массива, мы используем методsplice(). В массивеseaCreatures мы случайно создали неопределенный элемент массива ранее, поэтому давайте удалим его сейчас.
seaCreatures.splice(7, 1);
seaCreatures;
Output[ 'dragonfish',
'octopus',
'squid',
'shark',
'seahorse',
'starfish',
'whale',
'pufferfish',
'lobster' ]
В методеsplice() первый параметр означает номер индекса, который нужно удалить (в данном случае7), а второй параметр - количество элементов, которые следует удалить. Мы ставим1, что означает, что будет удален только один элемент.
Методsplice() изменит исходную переменную. Если вы хотите, чтобы исходная переменная оставалась неизменной, используйтеslice() и присвойте результат новой переменной.
let newArray = slice(7, 1);
Методpop() удалит последний элемент в массиве.
// Remove the last item from the seaCreatures array
seaCreatures.pop();
seaCreatures;
Output[ 'dragonfish',
'octopus',
'squid',
'shark',
'seahorse',
'starfish',
'whale',
'pufferfish' ]
lobster был удален как последний элемент массива. Чтобы удалить первый элемент массива, воспользуемся методомshift().
// Remove the first item from the seaCreatures array
seaCreatures.shift();
seaCreatures;
Output[ 'octopus',
'squid',
'shark',
'seahorse',
'starfish',
'whale',
'pufferfish' ]
Используяpop() иshift(), мы можем удалять элементы из начала и конца массивов. По возможности предпочтительно использоватьpop(), так как остальные элементы в массиве сохраняют свои исходные номера индексов.
Модификация элементов в массивах
Мы можем перезаписать любое значение в массиве, присваивая новое значение с помощью оператора присваивания, как если бы мы использовали обычную переменную.
// Assign manatee to the first item in the seaCreatures array
seaCreatures[0] = "manatee";
seaCreatures;
Output[ 'manatee',
'squid',
'shark',
'seahorse',
'starfish',
'whale',
'pufferfish' ]
Другой способ изменить значение - использовать методsplice() с новым параметром. Если бы мы хотели изменить значениеseahorse, которое является элементом с индексом3, мы могли бы удалить его и добавить на его место новый элемент.
// Replace seahorse with sea lion using splice method
seaCreatures.splice(3, 1, "sea lion");
seaCreatures();
Output[ 'manatee',
'squid',
'shark',
'sea lion',
'starfish',
'whale',
'pufferfish' ]
В приведенном выше примере мы удалилиseahorse из массива и поместили новое значение в индекс3.
Цикл по массиву
Мы можем перебрать весь массив с помощью ключевого словаfor, воспользовавшись свойствомlength. В этом примере мы можем создать массивshellfish и распечатать каждый номер индекса, а также каждое значение на консоли.
// Create an array of shellfish species
let shellfish = [
"oyster",
"shrimp",
"clam",
"mussel",
];
// Loop through the length of the array
for (let i = 0; i < shellfish.length; i++) {
console.log(i, shellfish[i]);
}
Output0 'oyster'
1 'shrimp'
2 'clam'
3 'mussel'
Мы также можем использовать циклfor...of, более новую функцию JavaScript.
// Create an array of aquatic mammals
let mammals = [
"dolphin",
"whale",
"manatee",
];
// Loop through each mammal
for (let mammal of mammals) {
console.log(mammal);
}
Outputdolphin
whale
manatee
Циклfor...of не извлекает порядковый номер элементов в массиве, но, как правило, это более простой и краткий способ перебора массива.
Использование циклов чрезвычайно полезно для распечатки всего значения массива, например, при отображении элементов из базы данных на веб-сайте.
Заключение
Массивы являются чрезвычайно универсальной и фундаментальной частью программирования на JavaScript. В этом руководстве мы узнали, как создать массив, как индексировать массивы, а также некоторые из наиболее распространенных задач работы с массивами, таких как создание, удаление и изменение элементов. Мы также изучили два метода циклического перемещения по массивам, который используется в качестве общего метода для отображения данных.
Вы можете узнать больше о других типах данных в JavaScript, прочитав наш учебник «https://www.digitalocean.com/community/tutorials/understanding-data-types-in-javascript[Understanding Типы данных в JavaScript]».