Tengo los siguientes valores:
const r = [{ id: 2, car: 'toyota}, {id: 1, car:'honda'}] const s = [{ id: 2, name: 'Samuel'},{id: 1, name: 'James'}]Quiero hacer coincidir las matrices en función de la identificación y agregar un nombre a cada identificación de objeto coincidente correspondiente.
const res = [{id: , car: , name: }]Tengo ciertos valores que necesito mapear juntos para convertirlos en un objeto de respuesta, por lo que debe ser una matriz de objetos con varias propiedades. Quiero mapear en función de una identificación y luego recorrer cada objeto en la matriz y agregar el objeto correspondiente. Amablemente ayuda, muy apreciada!
Puede lograr fácilmente el resultado usando Map y map
const r = [ { id: 2, car: "toyota" }, { id: 1, car: "honda" }, ]; const s = [ { id: 2, name: "Samuel" }, { id: 1, name: "James" }, ]; const map = new Map(r.map((o) => [o.id, o])); const result = s.map((o) => ({ ...o, ...(map.get(o.id) ?? []) })); 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; }En este problema, necesitamos filtrar los datos y también debemos mapear los datos para que este operador de filtro directo no funcione, así que resolví su problema con un bucle forEach.
const arr1 = [{ id: 2, car: 'toyota'}, {id: 1, car:'honda'}] const arr2 = [{ id: 3, name: 'Samuel'},{id: 1, name: 'James'}] const result = []; arr1.forEach(arr1Obj=>{ const matchedObject = arr2.find(arr2Obj=>arr2Obj.id==arr1Obj.id); if(matchedObject){ result.push({...arr1Obj,...matchedObject}); } }) console.log(result);