Массивы с JavaScript
Массивы — это простейшие структуры данных в информатике и решении задач. Если вы инженер JavaScript, который хочет освоить использование массивов, вы пришли в нужное место. Я намерен превратить вас из новичка в мастера массивов с помощью этого поста в блоге и последующих постов в блоге. Думайте об этом посте в блоге как о серии 😉😉.
Массивы хранят в памяти данные одного типа последовательно. Хотя JavaScript поддерживает хранение данных разных типов в массиве, считается лучшей практикой хранить в массиве только данные одного типа, поскольку другие языки программирования этого не поддерживают.
Преимущества использования массива
Рассмотрим сценарий, в котором мы сохраняем время в минутах, затрачиваемое автобусом X на каждую поездку до пункта назначения Y.
Это будет записано в коде как:
const time_taken_for_trip1 = 60; const time_taken_for_trip2 = 58; const time_taken_for_trip3 = 40; const time_taken_for_trip4 = 50; const time_taken_for_trip5 = 55;
Однако это не лучший подход, так как это приводит к избыточному и повторяющемуся коду. Это не кажется проблемой, если мы собираемся хранить записи только для нескольких поездок. Однако это становится неэффективным при попытке сохранить записи о сотнях или тысячах поездок. Вышеупомянутая запись может быть сохранена в массиве, как показано ниже.
const trip_records = []; //Declare an empty array trip_records[0] = 60; // Add an element to the array at index position 0 trip_records[1] = 58; // Add an element to the array at index position 1 trip_records[2] = 40; // Add an element to the array at index position 2 trip_records[3] = 50; // Add an element to the array at index position 3 trip_records[4] = 55; // Add an element to the array at index position 4
Or
const trip_records = [60, 58, 40, 50, 55]; //Declare an array and initialise its elements immediately
Объявление и инициализация массивов
Существует два основных способа создания массивов в JavaScript:
- Конструктор
new Array()
. Конструкторnew Array()
используется для создания объектов массива. Он принимает два необязательных аргумента: либо длину нового объекта массива, либо элементы создаваемого массива. Если методуnew Array()
передается один числовой аргумент, JavaScript интерпретирует его как длину создаваемого массива. Однако если в методnew Array()
передается несколько аргументов, разделенных запятыми, JavaScript интерпретирует их как элементы создаваемого массива. Это показано в приведенном ниже коде.
const trip_records = new Array(); // An empty trip_records array const trip_records = new Array(5); // An empty trip_records array whose length is 5 const trip_records = new Array (60, 58, 40, 50, 55); // trip_records array declared and initialized with its elements immediately
Однако описанный выше метод не считается лучшей практикой. Буквенное обозначение считается более эффективным методом.
- Обозначение литерала массива. Литерал массива — это список разделенных запятыми выражений, заключенных в пару квадратных скобок
[]
. Когда массив создается с использованием литерала массива, он принимает выражения, разделенные запятыми, в качестве своих элементов и количество добавленных выражений в качестве своей длины.
const trip_records = []; // An empty trip_records array whose length is 0 const trip_records = [60, 58, 40, 50, 55]; // trip_records array declared and initialized with its elements immediately, whose length is 5
Доступ к элементам массива
Чтобы получить доступ к элементам массива, индекс элемента в массиве передается в квадратных скобках, как показано ниже:
trip_records[0] // 60 trip_records[1] // 58
Важно отметить, что массивы имеют индекс 0, то есть первый элемент массива имеет индекс 0
, а не 1
, поэтому индекс последнего элемента в массиве будет на 1 пункт меньше, чем длина массива. В случае массива trip_records
55
имеет индекс 4
, а длина массива равна 5
.
Чтобы напечатать все элементы массива, можно использовать простой цикл, как показано во фрагменте кода ниже.
for(let i = 0; i < trip_records.length; i++){ console.log(trip_records[i]); } /* 60 58 40 50 55 */
Добавление элементов в массив
Добавление элементов в массивы — одна из основных операций, выполняемых над массивами. Для этого упражнения мы инициализируем массив x
, как показано ниже:
const x = [1,2,3,4,5]
Добавление элементов в конец массива
Массивы JavaScript имеют метод push
, который позволяет добавить один или несколько элементов в конец массива, для которого он вызывается. Если мы хотим добавить 6 в конец массива x
выше, будет использоваться метод push
, как показано в коде ниже.
console.log(x); // [1,2,3,4,5] x.push(6); console.log(x); // [1,2,3,4,5,6]
Код ниже иллюстрирует добавление нескольких элементов в конец массива x
выше.
console.log(x); // [1,2,3,4,5,6] x.push(7,8,9,["John", "Doe"]) console.log(x); // [1,2,3,4,5,6,7,8,9,["John", "Doe"]
Временная сложность этой операции составляет O(1)
, потому что для добавления элемента в конец массива требуется один шаг, поскольку операция не требует перемещения элементов вперед или назад в памяти.
Добавление элементов в начало массива
Метод unshift
массивов JavaScript используется для добавления элементов в начало массивов. Если мы хотим добавить 0 в начало массива x
выше, будет использоваться метод unshift
, как показано в коде ниже.
console.log(x); // [1,2,3,4,5,6,7,8,9,["John", "Doe"] x.unShift(0); console.log(x); // [0,1,2,3,4,5,6,7,8,9,["John", "Doe"]
Код ниже иллюстрирует добавление нескольких элементов в конец массива x
выше.
console.log(x); // [0,1,2,3,4,5,6,7,8,9,["John", "Doe"] x.unshift(-3,-2,-1,["Positive", "Integers"]); console.log(x); // [-3,-2,-1,["Positive", "Integers"],0,1,2,3,4,5,6,7,8,9,["John", "Doe"]
Важно отметить, что добавление элементов в начало массива требует больше вычислительных процессов. Напомним, что элементы массива хранятся в памяти последовательно. То есть, если 1
выше хранится по адресу в памяти 1000, 2
будет храниться по адресу в памяти 1001, а 5 будет храниться по адресу в памяти 1005. Следовательно, если мы хотим добавить элементы в начало x
, каждый другой элемент массива должен быть перемещен вперед в памяти, чтобы создать достаточно свободной памяти в начале массива для добавления новых элементов. Следовательно, временная сложность добавления элементов в начало массива равна O(n), где n — количество элементов, которые необходимо переместить в память для добавления нового элемента/элементов.
Удаление элементов из массива
Удаление элементов из массива — еще одна важная операция, выполняемая над массивом. Для этого упражнения мы инициализируем массив x
, как показано ниже:
const x = [1,2,3,4,5]
Удаление элементов с конца массива
Метод pop
массивов JavaScript позволяет нам удалить последний элемент массива, как показано в коде ниже.
console.log(x); // [1,2,3,4,5] x.pop(); console.log(x); // [1,2,3,4]
Временная сложность этой операции составляет O(1)
, потому что для удаления элемента в конце массива требуется один шаг, поскольку операция не требует перемещения элементов вперед или назад в памяти.
Удаление элементов из начала массива
Метод shift
массивов JavaScript позволяет нам удалить первый элемент в массиве, как показано в коде ниже.
console.log(x); // [1,2,3,4] x.shift(); console.log(x); // [2,3,4]
Важно отметить, что удаление элементов из начала массива требует больше вычислительных процессов. Напомним, что элементы массива хранятся в памяти последовательно. Следовательно, если мы хотим удалить элемент из начала массива x
, каждый другой элемент массива должен быть перемещен назад в памяти, чтобы занять первый свободный адрес памяти. Следовательно, временная сложность удаления элементов из массива равна O(n), где n — количество элементов, которые необходимо переместить в память для удаления элемента.
Добавление и удаление элементов из определенных позиций в массиве
Теперь мы знаем, как добавить элемент в конец и начало массива, а также как удалить элемент из начала и конца массива. Однако добавление и удаление элементов из определенных позиций в массиве — еще одна важная операция, выполняемая над массивами.
Метод splice
массивов JavaScript позволяет нам добавлять элементы и удалять элементы из массива в определенных позициях. Требуется 2 обязательных и 1 необязательный аргумент. Первый аргумент указывает индекс, с которого должна начинаться наша операция. Второй аргумент используется для указания количества элементов, которые мы хотим удалить из массива (0 передается, если мы не хотим удалять какой-либо элемент). Третий необязательный аргумент (аргументы) — это элемент/элементы, которые мы хотим добавить в массив. Использование метода splice
иллюстрируется следующими примерами.
Для этого упражнения мы инициализируем массив x
, как показано ниже:
const x = [0,1,2,3,4,5,6,7,8,9]
Удаление элементов из массива методом splice
Мы можем удалить элементы, используя метод splice, указав индекс, с которого мы хотим начать удаление, и количество элементов, которые мы хотим удалить. Это показано в коде ниже
console.log(x); // [0,1,2,3,4,5,6,7,8,9] x.splice(2,3); console.log(x); // [0,1,5,6,7,8,9]
Подобно удалению элементов из начала массива, временная сложность этой операции составляет O(n). Где n — количество элементов, которые необходимо переместить в память, чтобы элемент был удален.
Добавление элементов в массив с помощью метода splice
Предположим, мы хотим добавить элементы 2,3,4
обратно в массив x
, можно использовать метод сращивания, как показано ниже.
console.log(x); // [0,1,5,6,7,8,9] x.splice(2,0,2,3,4); console.log(x); // [0,1,2,3,4,5,6,7,8,9]
Первый аргумент 2
, переданный методу splice
, используется для указания индекса, с которого начнется наша операция. Второй элемент 0
определяет количество элементов, которые мы хотим удалить из массива. 2,3,4
— это элементы, которые мы хотим добавить в массив.
Подобно добавлению элементов в начало массива, временная сложность этой операции составляет O(n). Где n — количество элементов, которые необходимо переместить в память для добавления нового элемента/элементов.
В приведенном ниже коде показано, как одновременно удалять и добавлять элементы в массив с помощью метода сращивания.
console.log(x); // [0,1,2,3,4,5,6,7,8,9] x.splice(3,3,10,20) console.log(x); // [0,1,2,10,20,6,7,8,9]
Временная сложность этой операции O(n).
Поздравляем! В этом сообщении блога мы узнали, почему мы используем массивы, как объявлять и инициализировать массивы, как получать доступ к элементам в массиве, как добавлять элементы в массив и как удалять элементы из массива. В моем следующем блоге из этой серии мы углубимся в мир массивов, узнаем, среди прочего, о двумерных и многомерных массивах, а также о методах массивов JavaScript.
Если вы нашли этот пост информативным🤝, поделитесь им, поставьте аплодисменты👏 и следите за дополнительным контентом 😊. Спасибо🤏✨.