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

21 Авг 2019 в 07:05
184 +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
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир