Быстрый способ проверки равенства двух массивов в JavaScript

При первом изучении 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(...). 🙂

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

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

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

Если вам понравилась эта статья, пожалуйста, загляните в мой блог
Indepth JavaScript для более глубокого
контента. 🤓

Оцените статью
devanswers.ru
Добавить комментарий