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 se trata de objetos.
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.
Los métodos que más he usado al menos son crear una función para comparar cada una de las propiedades del objeto obteniendo los valores una por una, usar librerías como Lodash, por ejemplo, o simplemente hacer comparaciones más precisas de algún atributo en particular que identifique al objeto, como por ejemplo un identificador que retorne de una base de datos.
Comparar objetos usando 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. Si son iguales debería resultar, por ejemplo:
// Tenemos dos objetos distintos pero con mismos valores:
user = { name: 'Jhon', email: '[email protected]' }
user2 = { name: 'Jhon', email: '[email protected]' }
// 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 cómo 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.