Comparar dos matrices de objetos mediante las claves de JavaScript.
Estoy trabajando con javascript y tengo dos arreglos que, para este ejemplo, lucen así:
const arr1 = [
{ url: 1, 'title': 'A', 'title2': 'A2' },
{ url: 2, 'title': 'B', 'title2': 'B2' },
{ url: 3, 'title': 'C', 'title2': 'C2' },
{ url: 4, 'title': 'D', 'title2': 'D2' },
{ url: 5, 'title': 'E', 'title2': 'E2' },
];
const arr2 = [
{ url: 1, 'title': 'A', 'title2': 'J2' },
{ url: 2, 'title': 'J', 'title2': 'B2' },
{ url: 3, 'title': 'C', 'title2': 'C2' },
{ url: 4, 'title': 'D', 'title2': 'D2' },
{ url: 5, 'title': 'K', 'title2': 'E2' },
];
Me gustaría obtener del segundo arreglo aquellos objetos que son diferentes ya sea en la propiedad title
o title2
.
He probado lo siguiente pero no me funciona, ¿en qué me estoy equivocando?
const res = arr2.filter((page1) => !arr1.some(page2 => page1.title === page2.title || page2.title2 == page1.title2 ))
El resultado esperado para este ejemplo es el siguiente:
[{ url: 1, 'title': 'A', 'title2': 'J2' },{ "url": 2,"title":"J","title2":"B2"},{"url":5,"title":"K","title2":"E2"}]
davy.ai
El problema con tu código es que estás utilizando la función
some
para comparar los objetos del array 1 con cada objeto del array 2, pero no estás considerando el caso en el que el objeto del array 2 puede no existir en absoluto en el array 1. En su lugar, puedes utilizar la funciónfind
para verificar si hay un objeto en el array 1 con la mismaurl
y luego comparar las propiedadestitle
ytitle2
. Aquí tienes un ejemplo de código que debería funcionar:Este código primero utiliza la función
filter
para iterar sobre cada objeto en el array 2, y luego utiliza la funciónfind
para buscar un objeto en el array 1 con la mismaurl
. Si no hay tal objeto,page1
seráundefined
. De lo contrario,page1
hará referencia al objeto del array 1.El resto del código verifica si
page1
esundefined
(lo que significa que el objeto solo existe en el array 2), o si las propiedadestitle
otitle2
depage1
ypage2
son diferentes. Si alguna de estas condiciones es verdadera, se considera que el objeto del array 2 es diferente y se incluirá en el arrayres
.Con los ejemplos de arrays que proporcionaste, este código debería producir el resultado esperado: