Изучая JavaScript в первый раз, мы все делали это…

const a = [1,2];
const b = [1,2];
if (a === b) console.log('Equal!');

Если вы пробовали это, то ЗНАЕТЕ, что a === b каждый раз будет возвращать false.

_Почему это? _

Поскольку переменные массива назначаются по ссылке, а НЕ по значению.

Итак, a — это просто указатель на расположение [1,2] где-то в памяти. Хотя «b» — это еще один указатель на другое место в памяти, в нем также хранится [1,2].

Когда вы проверяете a === b, вы действительно проверяете местоположение их участников, а не значения, на которые они указывают.

Так что дает?

Есть ли простой способ проверить, равны ли базовые массивы, представленные a и b, БЕЗ необходимости выполнять поэлементное сравнение?

Вот быстрый чит, чтобы сделать это ...

const d = [1,2,4,5,6];
const c = [1,2,4,5,6];
if (JSON.stringify(d) === JSON.stringify(c)) console.log('Equal!');

Почему это работает?

И вообще, что такое JSON.stringify(...)?

JSON.stringify(...) принимает массив (или объект) и возвращает его строковое представление.

Строка!

Например:

JSON.stringify([7,8,9])

Просто вернет '[7,8,9]'. Поскольку значение является строкой, вы можете сравнить его со значением другого массива, который также возвращается в виде строки с JSON.stringify(...). :)

Этот трюк работает даже с двойным массивом (и вообще с многомерными массивами). Таким же образом можно сравнивать объекты, при условии, что свойства каждого объекта находятся в одном порядке.

Еще один совет

Если вы хотите сравнить, содержат ли 2 массива одинаковые значения, независимо от порядка, просто используйте метод Array.sort() для сортировки сначала обоих массивов, ЗАТЕМ используйте JSON.stringify для сравнения!

Если вам понравилась эта статья, загляните в мой блог Углубленный JavaScript для получения дополнительной информации. 🤓