Массивы
Массив (array) представляет собой форму организации упорядоченного набора данных.
Массивы в JavaScript — это объекты особого вида, имеющие среди свойств числовые индексы и наследующие
методы от Array.prototype
.
В верности сказанного можно убедиться, запустив следующий код:
Перемешивание массива в случайном порядке.
Определив следующую функцию как метод Array.prototype
, мы сможем вызывать её на любом массиве:
Сравнение массивов
Массивы представляют собой частный случай объектов;
тождество значений всех свойств объектов не позволяет считать объекты тождественными — объект не определяется однозначно своими свойствами;
точно так же массив не определяется свими элементами и их порядком.
Поэтому следующий код выдаёт false
: console.log([1, 2]==[1, 2])
.
Для установления эквивалентности массивов можно использовать следующую функцию:
Функция equal
принимает два массива для сравнения и функцию сравнения элементов.
Для работы с одномерными массивами, состоящими из примитивов, в качестве третьего аргумента достаточно использовать функцию, возвращающую true
в
случае тождества примитивов и false
в противном случае (первый пример в коде выше).
Для сравнения многомерных массивов (второй вызов функции equal
в коде) и вообще массивов, элементами которых являются объекты, в качестве compare
необходимо использовать функцию,
осуществляющую глубокое сравнение (см. здесь; приведённую функцию deepEqual
можно также непосредственно использовать для сравнения массивов).
Также можно использовать универсальный способ сравнения объектов:
В некоторых случаях нам может потребоваться выяснить, состоят ли массивы из одних и тех же элементов, пренебрегая порядком элементов и числом вхождений:
В этом коде в качестве третьего аргумента в дефолтном варианте выбирается функция, устанавливающая тождество (==
) переданных ей значений.
Копирование массива
Простое объявление новой переменной, ссылающейся на существующий объект не приводит к созданию нового объекта.
Для того, чтобы создать новый массив, идентичный данному, но меняющийся независимо от данного, можно использовать один из способов, продемонстрированных в следующем листинге:
Все перечисленные способы (кроме последнего — представленного в строке 9 — представляющего собой реализацию универсального метода копирования объектов) идеально подходят лишь для копирования одномерного массива.
Для построения копии многомерного массива любого уровня вложенности применим следующую функцию:
Многомерные массивы.
Следующий код позволяет найти общее число элементов принадлежащих как самому многомерному массиву, так и входящим в него массивам:
Тот же результат может быть получен применением метода flat
: