Как сравнивать объекты? Допустим имеются у меня в массиве объекты, а также имеется функция принимающая в качестве параметра один объект. Она должна обойти массив и найти идентичный объект. Какой способ сравнения объектов в данном случае уместнее всего использовать?

21 Авг 2019 в 07:05
168 +1
1
Ответы
1

В данном случае уместнее всего использовать метод глубокого сравнения объектов. Для этого каждое поле объекта можно сравнивать поочередно, проверяя равенство значений с помощью оператора сравнения (===) или метода Object.is(). Также можно воспользоваться методом JSON.stringify(), который преобразует объекты в строки и позволяет сравнивать их простым сравнением строк.

Пример реализации функции:

function findObject(arr, targetObj) {
for (let obj of arr) {
if (isEqual(obj, targetObj)) {
return obj;
}
}
return null;
}
function isEqual(obj1, obj2) {
return JSON.stringify(obj1) === JSON.stringify(obj2);
}

В данном примере используется метод JSON.stringify() для преобразования объектов в строки и последующего сравнения. Однако данный способ не подходит для объектов с вложенными объектами или функциями.

В случае вложенных объектов или функций можно рекурсивно сравнивать каждое поле объекта, используя следующий модифицированный метод isEqual():

function isEqual(obj1, obj2) {
if (typeof obj1 !== 'object' || typeof obj2 !== 'object') {
return obj1 === obj2;
}
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) {
return false;
}
for (let key of keys1) {
if (!isEqual(obj1[key], obj2[key])) {
return false;
}
}
return true;
}

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

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 005 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир