Quiero comparar 2 matrices de objetos para encontrar el objeto u objetos que no coinciden. En el siguiente ejemplo, debería generar {label: 'Addition', type: 'address', name: 'address_4', defaultValue: 'test'} ya que este objeto no coincide.
const A = [{ label: 'Street Name', type: 'address', name: 'address_1', defaultValue: 'test1' }, { label: 'House Number', type: 'address', name: 'address_2', defaultValue: '1563l1' }, { label: 'Addition', type: 'address', name: 'address_3', defaultValue: 'ABC684' } ] const B = [{ label: 'Street Name', type: 'address', name: 'address_1', defaultValue: 'test1' }, { label: 'House Number', type: 'address', name: 'address_2', defaultValue: '1563l1' }, { label: 'Addition', type: 'address', name: 'address_3', defaultValue: 'ABC684' }, { label: 'Addition', type: 'address', name: 'address_4', defaultValue: 'test' } ] const newSet = A; const currentSet = B; let difference = currentSet.filter((page1) => !newSet.find(page2 => page1.name === page2.name)) console.log(difference);Esto no funciona. Da salida a un Array vacío. ¿Qué estoy haciendo mal?
Puede comparar A con B , lo que devuelve una matriz vacía porque no hay ningún elemento en A que no exista en B ; en su lugar, debe comparar B con A
El siguiente código devolverá una matriz vacía
const A = [ { label: "Street Name", type: "address", name: "address_1", defaultValue: "test1", }, { label: "House Number", type: "address", name: "address_2", defaultValue: "1563l1", }, { label: "Addition", type: "address", name: "address_3", defaultValue: "ABC684", }, ]; const B = [ { label: "Street Name", type: "address", name: "address_1", defaultValue: "test1", }, { label: "House Number", type: "address", name: "address_2", defaultValue: "1563l1", }, { label: "Addition", type: "address", name: "address_3", defaultValue: "ABC684", }, { label: "Addition", type: "address", name: "address_4", defaultValue: "test", }, ]; let difference = A.filter((page1) => { const result = B.find((page2) => page1.name === page2.name); return !result; }); console.log(difference); Debes comparar B con A como:
const A = [ { label: "Street Name", type: "address", name: "address_1", defaultValue: "test1", }, { label: "House Number", type: "address", name: "address_2", defaultValue: "1563l1", }, { label: "Addition", type: "address", name: "address_3", defaultValue: "ABC684", }, ]; const B = [ { label: "Street Name", type: "address", name: "address_1", defaultValue: "test1", }, { label: "House Number", type: "address", name: "address_2", defaultValue: "1563l1", }, { label: "Addition", type: "address", name: "address_3", defaultValue: "ABC684", }, { label: "Addition", type: "address", name: "address_4", defaultValue: "test", }, ]; let difference = B.filter((page1) => { const result = A.find((page2) => page1.name === page2.name); return !result; }); console.log(difference);Si hay un caso en el que desea obtener la diferencia entre dos matrices, puede hacer lo siguiente:
const [small, large] = A.length < B.length ? [A, B] : [B, A]; let difference = large.filter((page1) => { const result = small.find((page2) => page1.name === page2.name); return !result; });