Массивы в JavaScript

В этой главе мы рассмотрим массивы JavaScript.

В JavaScript вы можете использовать массивы для хранения нескольких значений в одной переменной.

Массив можно описать как уникальную переменную, способную одновременно хранить более одного значения.

Существуют два синтаксиса для создания пустого массива:

let arr = new Array();
let arr = [];

Второй синтаксис используется большую часть времени. Вы можете добавить начальные элементы в скобки, например:

Javascript arrays
let books = ["Html", "Css", "Javascript"]; console.log(books[0]); // Html console.log(books[1]); // Css console.log(books[2]); // Javascript

Вы также можете заменить элемент следующим образом:

Javascript arrays
let books = ["Html", "Css", "Javascript"]; books[2] = 'Php'; // now ["Html", "Css", "Php"] console.log(books);

Либо вы можете добавить новый элемент в массив, например:

Javascript arrays add new element
let books = ["Html", "Css", "Javascript"]; books[3] = 'Php'; // now ["Html", "Css", "Javascript", "Php"] console.log(books); // Html, Css, Javascript, Php

Длина массива length - это общее количество элементов. Вот пример:

Javascript arrays length
let books = ["Html", "Css", "Javascript"]; console.log(books.length); // 3

Если вы собираетесь показать весь массив, вы можете использовать console.log, например:

Массив может хранить элементы любых типов:

Javascript arrays multitype
// mix of values let arr = ['Javascript', { sitename: 'W3Docs'}, true, function () { console.log('welcome'); }]; // get the object at index 1 and then show its name console.log(arr[1].sitename); // W3Docs // get the function at index 3 and run it arr[3](); // welcome

Массивы можно рассматривать как особый вид объектов. Одним из наиболее заметных сходств является то, что массивы могут заканчиваться запятой.

Например:

let books = [
 "Html",
 "Css",
 "Javascript",
];

Методы

Одним из наиболее распространенных применений массивов является очередь. в информатике это известно как упорядоченное собрание элементов, поддерживающее следующие две операции:

push - используется для добавления элемента в конец

shift - используется для извлечения элемента с начала, продвигая очередь. В результате второй элемент становится первым.

Массивы поддерживают обе вышеупомянутые операции, и это широко практикуется разработчиками.

Вы можете использовать массивы для другой практики. Это структура данных, называемая стек, которая поддерживает две операции:

push - она направлена на добавление элемента в конец.

pop - она направлена на извлечение элемента с конца.

В javascript массивы работают как очередь и как стек. С помощью массивов вы можете добавлять или удалять элементы с начала или с конца.

Методы, работающие с концом массива

pop

Этот метод используется для извлечения и возврата последнего элемента массива. Например:

Javascript arrays pop element
let books = ["Html", "Css", "Javascript"]; console.log(books.pop()); // remove "Jasvascript" and alert it console.log(books); // Html, Css

push

Вы можете использовать этот метод для добавления элемента в конец массива, например:

Javascript arrays push element
let books = ["Html", "Css"]; books.push("Javascript"); console.log(books); // Html, Css, Javascript

Вызовы books.push(...) и books[books.length] = ... равнозначны.

Методы, работающие с началом массива

shift

Этот метод предназначен для извлечения и возврата первого элемента массива.

Например:

Javascript arrays shift element
let books = ["Html", "Css", "Javascript"]; console.log(books.shift()); // remove Html and show it console.log(books); // Css, Javascript

unshift

Это используется для добавления элемента в начало массива, как следует:

Javascript arrays unshift element
let books = ["Css", "Javascript"]; books.unshift('Html'); console.log(books); // Html, Css, Javascript

С помощью методов push и unshift вы можете одновременно добавить разные элементы.

Давайте посмотрим на этот пример:

Javascript arrays push and unshift element
let books = ["Html"]; books.push("Css", "Javascript"); books.unshift("Php", "C#"); // ["Php", "C#", "Html", "Css", "Javascript"] console.log(books);

Внутренности

Как мы упоминали выше, массивы - это особый тип объектов. Квадратные скобки используются для доступа к свойству arr[0], исходящему из синтаксиса объекта. Одно делает массив еще более особенным. Это их внутреннее представление. Движок стремится хранить его элементы последовательно в смежной области памяти. Но, обратите внимание, что они нарушатся, если вы перестанете работать с массивом в данном порядке и обращаться к нему как к обычному объекту.

Например, технически возможно поступить так:

let books = []; // make an array 
books[99999] = 5; // assign a property with the index far greater than its length 
books.name = "Javascript"; // create a property with an arbitrary name

Это возможно, потому что массивы - это объекты. У вас есть возможность добавлять свойства к ним.

Вы также должны знать случаи неправильного использования массива, чтобы избежать их. Вот несколько примеров:

  • Добавление свойства нечислового типа, например arr.test = 9.
  • Создание дыр, например, добавьте arr[0], а затем arr[500], не вставляя ничего между ними.
  • Заполнение массива в обратном порядке. Например, arr[500], arr[499].

Мы можем предположить, что нужно рассматривать массивы как уникальные структуры, работая с ними с упорядоченными данными.

Циклы

Один из общих способов перебора элементов массива - это цикл for по индексам.

Вот пример:

Javascript arrays loop
let arr = ["Html", "Css", "Javascript"]; for (let i = 0; i < arr.length; i++) { console.log(arr[i]); }

Другой вид цикла - for..of.

Пример выглядит так:

Javascript arrays loop
let books = ["Html", "Css", "Javascript"]; // iterates over array elements for (let book of books) { console.log(book); }

В этой форме цикла нет доступа к номеру текущего элемента.

Поскольку массивы являются объектами, вы технически также можете использовать for..in:

Javascript arrays loop
let booksArray = ["Html", "Css", "Javascript"]; for (let key in booksArray) { console.log(booksArray[key]); // Html, Css, Javascript }

В любом случае, это не очень хорошая идея, так как это может вызвать потенциальные проблемы, такие как:

  • Цикл for..in может итерировать все свойства, а не только числовые свойства.
  • Цикл for..in оптимизирован для общих объектов, а не массивов. Вот почему он до 10-100 раз медленнее.

Длина

Всякий раз, когда мы изменяем массив, свойство length автоматически обновляется. Это не количество значений в массиве, а числовой индекс + 1. Например, одному элементу с большим индексом будет соответствовать большая длина, например:

Javascript arrays length
let books = []; books[100] = "Html"; console.log(books.length); // 101

Тем не менее, разработчики не используют массивы таким образом.

Свойство length доступно для записи. Когда вы его уменьшаете, массив усекается. Давайте посмотрим на этот пример:

Javascript arrays length
let arr = [1, 2, 3, 4, 5]; arr.length = 3; // truncate to 3 elements console.log(arr); // [1, 2, 3] arr.length = 5; // return length back console.log(arr[4]); // undefined: the values do not return

Вы можете легко очистить массив, используя arr.length = 0;.

Создание нового массива

Здесь другой синтаксис для создания массива:

let arr = new Array("Html", "Css", "etc");

В любом случае, этот синтаксис редко используется.

В случае, если new Array вызывается только с одним аргументом, который является числом. Затем он создает массив без элементов, но с определенной длиной:

Javascript create array
let arr = new Array(3); // will it create an array of [3] console.log(arr[0]); // undefined! no elements. console.log(arr.length); // length 3

В упомянутом выше коде все элементы равны undefined .

Многомерные массивы

Массивы могут иметь элементы, которые также являются массивами. Это можно использовать для многомерных массивов для хранения матриц:

Javascript create array
let matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; console.log(matrix[1][1]); // 5, the central elementarrays

Метод toString

Массивы реализуют метод toString своим собственным способом. Он возвращает список элементов, разделенных запятыми. Вот пример:

Javascript create array
let arr = [1, 2, 3]; console.log(arr); // 1,2,3 console.log(String(arr) === '1,2,3'); // true

Существует и альтернативный вариант:

Javascript create array
console.log([] + 1); // "1" console.log([1] + 1); // "11" console.log([2, 1] + 2); // "2,12"

Но у них нет Symbol.toPrimitive и valueOf. Массивы реализуют только преобразование toString. Таким образом, здесь [] преобразуется в "1" и [2,1] становится "2,1".

Если бинарный плюс "+" оператор что-то добавляет к строке, он переключает его на строку, поэтому следующий шаг выглядит так:

Javascript create array
console.log("" + 1); // "1" console.log("2" + 1); // "21" console.log("2,2" + 1); // "2,21"

Время Викторины: Проверьте Свои Навыки!

отовы проверить свои знания? Погрузитесь в наши интерактивные викторины для более глубокого понимания и веселого способа закрепить знания.

Считаете ли это полезным?