Tengo dos matrices de objetos (Array1 y Array2) que debo combinar en una matriz (resultado).
Si un valor está presente en ambas matrices, debe estar solo una vez en la matriz final.
Si un valor no está presente en ninguna de las matrices, debe agregarse con el booleano establecido en verdadero.
Aquí está la situación:
const Array1 = [ {value: "id1", name: "Element1", boolean: false}, {value: "id2", name: "Element2", boolean: false}, {value: "id3", name: "Element3", boolean: false} ] const Array2 = [ {value: "id1", name: "Element1", boolean: false}, {value: "id2", name: "Element2", boolean: false}, {value: "id4", name: "Element4", boolean: false} ]Rendimiento esperado:
const result = [ {value: "id1", name: "Element1", boolean: false}, {value: "id2", name: "Element2", boolean: false}, {value: "id3", name: "Element3", boolean: true}, {value: "id4", name: "Element4", boolean: true} ]Puede lograr fácilmente el resultado usando Map
const Array1 = [ { value: "id1", name: "Element1", boolean: false }, { value: "id2", name: "Element2", boolean: false }, { value: "id3", name: "Element3", boolean: false }, ]; const Array2 = [ { value: "id1", name: "Element1", boolean: false }, { value: "id2", name: "Element2", boolean: false }, { value: "id4", name: "Element4", boolean: false }, ]; const map = new Map(Array1.map((o) => [o.value, [o]])); Array2.forEach((o) => map.has(o.value) ? map.get(o.value).push(o) : map.set(o.value, [o]) ); const result = [...map.values()].map((arr) => arr.length > 1 ? arr[0] : { ...arr[0], boolean: true } ); console.log(result); /* This is not a part of answer. It is just to give the output full height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }