Вступление
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]».