Tengo dos matrices, y quiero poder comparar las dos y reemplazar los valores del objeto para la identificación presente en la matriz de información con la matriz de detalles y completar el resto tal como está. No he encontrado nada como esto. ¿Cuál sería la mejor manera de devolver similitudes?
const details = [{ id: "id1", description: "new description-1" }, { id: "id3", linkUrl: "new link-1" } ] const info = [{ id: "id1", description: "old description-1", linkUrl: "#id1link-1", image: "#imageUrl-1" }, { id: "id2", description: "description-2", linkUrl: "#id1link-2", image: "#imageUrl-2" }, { id: "id3", description: "description-3", linkUrl: "#old link-2", image: "#imageUrl-2" } ] const result = [{ id: "id1", description: "new description-1", linkUrl: "#id1link-1", image: "#imageUrl-1" }, { id: "id2", description: "description-2", linkUrl: "#id1link-2", image: "#imageUrl-2" }, { id: "id3", description: "description-3", linkUrl: "#new link-2", image: "#imageUrl-2" } ]Asignación de uso de mapas, búsqueda y desestructuración.
const result = info.map(item => { const new_info = details.find(detail => detail.id === item.id); return { ...item, ...new_info, }; })Para grandes cantidades de datos, es mejor crear primero un mapa para los datos de detalles, de modo que la recuperación de una identificación pueda ocurrir en un tiempo constante:
const details = [{id:"id1",description: "new description-1"},{id: "id3",linkUrl: "new link-1"}]; const info = [{id: "id1",description: "old description-1",linkUrl: "#id1link-1",image: "#imageUrl-1"},{id: "id2",description: "description-2",linkUrl: "#id1link-2",image: "#imageUrl-2"},{id: "id3",description: "description-3",linkUrl: "#old link-2",image: "#imageUrl-2"}]; const map = new Map(details.map(({id, ...rest}) => [id, rest])); const result = info.map(o => ({...o, ...map.get(o.id)})); console.log(result);