Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

125
Vistas
Compare dos matrices de objetos y devuelva verdadero si coinciden

Digamos que tengo dos matrices de objetos como,

 let detail1 = [ {'book':'LOTR','price':'14'} {'book':'Harry pottar','price':'12'}, ] let detail2 = [ {'book':'Harry pottar','price':'15'}, {'book':'LOTR','Price':'14'}, {'book':'HPP','Price':'21'} ]

Quiero comparar dos matrices de objetos y devolver verdadero o falso dependiendo de si son iguales o no.

Nota: la estructura del objeto, es decir, la clave, siempre será la misma, su valor puede cambiar o no.

Para esto lo intenté como,

 for(let i = 0 ;i<detail1.length; i++){ for(let j = 0; j<detail2.length; j++){ if(JSON.stringify(detail1[i]) === JSON.stringify(detail2[i])){ boolValue = true } else { boolValue = false } } }

Pero esto está dando un valor incorrecto, digamos que tengo otra matriz de objetos como,

 let detail1 = [ {'book':'LOTR','price':'14'} {'book':'Harry pottar','price':'12'}, ] let detail2 = [ {'book':'Harry pottar','price':'12'}, {'book':'LOTR','price':'14'} ]

Pero cuando se cambia el orden, está dando un valor incorrecto.

¿Cuál es la posible solución para comparar dos matrices de objetos y devolver verdadero si son iguales y falso si son diferentes para cualquier caso dada la estructura del objeto, es decir, la clave es la misma?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

No puede usar la codificación JSON para verificar la igualdad, porque depende del orden, por ejemplo:

 console.log( JSON.stringify({'book':'LOTR','price':'14'}) == JSON.stringify({'price':'14', 'book':'LOTR'}) )

Sin embargo, puedes hacer algo como esto:

 let detail1 = [ {'book':'LOTR','price':'14'}, {'book':'Harry pottar','price':'12'}, ] let detail2 = [ {'book':'Harry pottar','price':'15'}, {'book':'LOTR','Price':'14'}, {'book':'HPP','Price':'21'} ] function equal(a, b){ return a.length == b.length && // same length and a.every( // every element in a e1 => b.some( // has a match in b e2 => e1.book == e2.book && e1.price == e2.price ) ) } console.log(equal(detail1,detail2), equal(detail1,detail1), equal(detail2,detail2))

Como señaló @TJ Crowder , en realidad puede evitar verificar cada entrada de su objeto manualmente y simplemente usar Object.entries (tenga cuidado de usar esto solo si sus objetos están compuestos solo por cadenas de pares de claves)

 let detail1 = [ {'book':'LOTR','price':'14'}, {'book':'Harry pottar','price':'12'}, ] let detail2 = [ {'book':'Harry pottar','price':'15'}, {'book':'LOTR','Price':'14'}, {'book':'HPP','Price':'21'} ] function equal(a, b){ return a.length == b.length && // same length and a.every( // every element in a e1 => b.some( // has a match in b e2 => Object.keys(e1).every(key => e1[key] === e2[key]) ) ) } console.log(equal(detail1,detail2), equal(detail1,detail1), equal(detail2,detail2))

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede lograr fácilmente el resultado usando Object.keys y cada

 arr1.length !== arr2.length && arr1.every((o, i) => Object.keys(o).every((prop) => arr2[i][prop] && arr2[i][prop] === o[prop]) ) 

 let detail1 = [ { book: "LOTR", price: "14" }, { book: "Harry pottar", price: "12" }, ]; let detail2 = [ { book: "Harry pottar", price: "15" }, { book: "LOTR", Price: "14" }, { book: "HPP", Price: "21" }, ]; function isEqual(arr1, arr2) { if (arr1.length !== arr2.length) return false; return arr1.every((o, i) => { return Object.keys(o).every((prop) => { return arr2[i][prop] && arr2[i][prop] === o[prop]; }); }); } console.log(isEqual(detail1, detail2));

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda