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
JSON.stringify al Comparar Objetos y Arrays Ordenados

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
JSON.stringify al Comparar Objetos y Arrays Desordenados

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 }
Método para Comparar Objetos Desordenados y Arrays Ordenados

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
Comparación de Objetos Simples
const arr1 = ['Francisco', 'Moncayo'] const arr2 = ['Francisco', 'Moncayo'] console.log(compare_elements(arr1, arr2)) // true
Comparación de Arrays Simples
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
Comparación de Arrays y Objetos Anidados

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?.