> Можно ли сравнить два объекта в JavaScript и как это сделать (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Soft_Media_Group, Tilda, Evercode
Стек: JavaScript
> Пример ответа
Да, в JavaScript можно сравнить два объекта, но напрямую операторами == или === это не сработает, так как они сравнивают ссылки, а не содержимое. Два разных объекта с одинаковыми свойствами будут считаться неравными, потому что хранятся в разных участках памяти.
Для сравнения содержимого объектов нужно реализовать собственную логику. Вот несколько способов:
- Ручное сравнение свойств - перебираем ключи и сравниваем значения:
JAVASCRIPTfunction 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;}
- Глубокое сравнение - для вложенных объектов рекурсивно:
JAVASCRIPTfunction 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;}
- Использование JSON.stringify - быстро, но с ограничениями (не работает для функций, undefined, циклических ссылок):
JAVASCRIPTJSON.stringify(obj1) === JSON.stringify(obj2);
- Библиотеки - например,
lodash.isEqual:
JAVASCRIPTimport isEqual from 'lodash.isequal';isEqual(obj1, obj2); // true/false
Выбор метода зависит от задачи: для простых плоских объектов подойдёт JSON.stringify, для вложенных - рекурсивная функция или библиотека.
> Похожие задачи по frontend
В чем разница между Promise.all и Promise.allSettled в JavaScript?
Как сравнить массивы аргументов для кеширования в функции memo в JavaScript
Почему новый объект не изменяет исходный объект при передаче в функцию в JavaScript
Как работает конструктор Promise, синхронность создания и асинхронность резолва в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью