3 Formas de comprar un Objeto en JavaScript

Las comparaciones de valores en JavaScript son un poco confusas muchas veces y más si lo que queremos es comparar valores entre dos objetos ya que el comparador estricto de "===" no funciona de la misma forma cuando de Objetos se trata.

Si tenemos un objeto llamado "user" y luego tenemos otro objeto llamado "user2" y queremos saber si son iguales, no podemos hacer la comparación directamente así "user === user2" ya que esto nos dará falso siempre porque de esa forma estamos comparando referencias y no sus propiedades o valores.

Cómo comparar objetos en javascript

Los métodos que más he usado yo al menos es crear una función para comparar cada una de las propiedades del objeto obteniendo los valores una por una, usando librerías como Lodash, por ejemplo, o simplemente haciendo comparaciones más precisas de alguna tributo en particular que identifique al objeto, como por ejemplo un identificador que retorne de una base de datos.

Comparar objetos usando con JSON

También hay un "truco" que podría aplicar a muchos casos y es usar el objeto global JSON. Esto sería de una forma muy simple porque JSON tiene el método estático "stringify" que convierte cualquier estructura JSON en una cadena de texto y con esto podríamos comparar con otro objeto convertido de la misma forma ya que ambos serían una cadena de texto y si son iguales debería resultar, por ejemplo:

// Tenemos dos objetos distintos pero con mismos valores:
user = { name: 'Jhon', email: 'jhon@email.test' }
user2 = { name: 'Jhon', email: 'jhon@email.test' }

// Usamos el método stringify de JSON para comparar.
console.log(JSON.stringify(user) === JSON.stringify(user2)) // Retorno esperado: true

Comparando objetos con una función helper

Lo otro que podemos hacer es crear nuestro propio método que nos ayude a comparar un objeto json de JavaScript. Por ejemplo un método simple sería el siguiente:

const isObjectsEquals = (objetoA, objetoB) => {
const keysA = Object.keys(objetoA);
const keysB = Object.keys(objetoB);

if (keysA.length !== keysB.length) {
return false;
}

for (const key of keysA) {
if (objetoA[key] !== objetoB[key]) {
return false;
}
}

return true;
}

// Ejemplo de uso:
const objeto1 = { nombre: "Juan", edad: 30 };
const objeto2 = { nombre: "Juan", edad: 30 };
const objeto3 = { nombre: "María", edad: 25 };

console.log(isObjectsEquals(objeto1, objeto2)); // Debería imprimir true
console.log(isObjectsEquals(objeto1, objeto3)); // Debería imprimir false

Comparando Objetos JavaScript con Lodash

Lodash es una librería de utilidades para JavaScript que tiene muchas funciones útiles para usar en el desarrollo de nuestros proyectos. Entre esos métodos se encuentra el método _.isEqual(value, other)

Según la documentación oficial de Lodash el método isEqual evalúa dos objetos javascript y hace una comparación profunda de sus propiedades para saber si son iguales o no.

Este ejemplo de la documentación oficial deja en claro como se usa este método:

const object = { 'a': 1 };
const other = { 'a': 1 };

_.isEqual(object, other);
// => true

object === other;
// => false

No solo sirve para comparar objetos, también dice que sirve para comparar arrays, array buffers, booleans, date objects, error objects, maps, numbers, Object objects, regexes, sets, strings... y así un largo etcétera.

Así podemos ver que existen más de un camino para resolver asuntos que nos encontremos cuando programamos, siempre hay que buscar porque la solución está y hay que elegir la que más se adapte a nuestras necesidades según cada contexto y proyecto.