> Можно ли сравнить два объекта в JavaScript и как это сделать (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Soft_Media_Group, Tilda, Evercode

Стек: JavaScript

> Пример ответа

Да, в JavaScript можно сравнить два объекта, но напрямую операторами == или === это не сработает, так как они сравнивают ссылки, а не содержимое. Два разных объекта с одинаковыми свойствами будут считаться неравными, потому что хранятся в разных участках памяти.

Для сравнения содержимого объектов нужно реализовать собственную логику. Вот несколько способов:

  1. Ручное сравнение свойств - перебираем ключи и сравниваем значения:
JAVASCRIPT
function shallowEqual(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 (obj1[key] !== obj2[key]) return false;
}
return true;
}
  1. Глубокое сравнение - для вложенных объектов рекурсивно:
JAVASCRIPT
function deepEqual(obj1, obj2) {
if (obj1 === obj2) return true;
if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) return false;
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) return false;
for (let key of keys1) {
if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) return false;
}
return true;
}
  1. Использование JSON.stringify - быстро, но с ограничениями (не работает для функций, undefined, циклических ссылок):
JAVASCRIPT
JSON.stringify(obj1) === JSON.stringify(obj2);
  1. Библиотеки - например, lodash.isEqual:
JAVASCRIPT
import isEqual from 'lodash.isequal';
isEqual(obj1, obj2); // true/false

Выбор метода зависит от задачи: для простых плоских объектов подойдёт JSON.stringify, для вложенных - рекурсивная функция или библиотека.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью