Cómo Comparar Objetos y Arrays en Javascript
Aunque no existe una forma nativa de comparar objetos en javascript, existe 1 forma muy sencilla de compararlos usando JSON.stringify
y otra más complicada y más adecuada creando tu propio método de javascript.
JSON.stringify
En este caso transformamos los objetos o arrays en strings y los comparamos.
const obj1 = { name: 'Francisco', lastname: 'Moncayo' }
const obj2 = { name: 'Francisco', lastname: 'Moncayo' }
console.log(JSON.stringify(obj1) == JSON.stringify(obj2)) // true
const arr1 = ['Francisco', 'Moncayo']
const arr2 = ['Francisco', 'Moncayo']
console.log(JSON.stringify(arr1) == JSON.stringify(arr2)) // true
Este método compara todo el objeto y sirve únicamente para objetos que tengan el mismo orden de valores, por el contrario, la comparación devolverá false
como en la siguiente comparación.
const obj1 = { name: 'Francisco', lastname: 'Moncayo' }
const obj2 = { lastname: 'Moncayo', name: 'Francisco' }
console.log(JSON.stringify(obj1) == JSON.stringify(obj2)) // false
const arr1 = ['Francisco', 'Moncayo']
const arr2 = ['Moncayo', 'Francisco']
console.log(JSON.stringify(arr1) == JSON.stringify(arr2)) // false
Método Personalizado
Si realmente deseas comparar 2 objetos en los que el orden de sus valores no es importante, debes crear un método para hacerlo.
const compare_elements = (obj1, obj2) =>{
if (Array.isArray(obj1) && Array.isArray(obj2)) {}
else if (typeof obj1 === 'object' && typeof obj2 === 'object') {}
else return obj1 === obj2
const entries1 = Object.entries(obj1)
const entries2 = Object.entries(obj2)
if (entries1.length !== entries2.length) return false
for (const [key1, value1] of entries1) {
if (!obj2.hasOwnProperty(key1)) return false
if (!compare_elements(value1, obj2[key1])) return false
}
return true
}
Este método te permitirá comparar las llaves y los valores de objeto, de manera que la comparación se haga en cada elemento y de forma anidada de la siguiente manera.
const obj1 = { name: 'Francisco', lastname: 'Moncayo' }
const obj2 = { lastname: 'Moncayo', name: 'Francisco' }
console.log(compare_elements(obj1, obj2)) // true
const arr1 = ['Francisco', 'Moncayo']
const arr2 = ['Francisco', 'Moncayo']
console.log(compare_elements(arr1, arr2)) // true
const arr1 = [
24,
'Francisco',
{
name: 'Francisco',
lastname: 'Moncayo',
letters: ['a', 'b']
}
]
const arr2 = [
24,
'Francisco',
{
name: 'Francisco',
letters: ['a', 'b'],
lastname: 'Moncayo'
}
]
console.log(compare_elements(arr1, arr2)) // true
Sugerencias
Debido a que este último método se puede usar para cualquier objeto o array, te recomiendo agregarlo como un prototipo del objeto plantilla de javascript, si no sabes como hacerlo, te recomiendo leer ¿Cómo crear prototipos para objetos en javascript?.