hola, quiero enviar una matriz de un objeto a una matriz de un objeto para que la nueva propiedad se envíe a la matriz de objetos en función del mismo _id, estos son los datos originales:
const data =[ { foo:foo1, data:{ _id:"a1", man:2 } }, { foo:foo1, data:{ _id:"a1", man:2 } } ]estos son los datos que quiero poner en mis datos originales
const d = [{ _id:"a1", women:4, }]Y la salida deseada es:
const data =[ { foo:foo1, data:{ _id:"a1", man:2, women:4 } }, { foo:foo1, data:{ _id:"a1", man:2, women:4 } } ]Creo que se puede hacer usando for loop y verificar si el _id es el mismo y empujarlo al objeto, pero ¿hay alguna forma mejor? o usando lodash? ¿alguna idea? gracias de antemano
¡Puedes probar esto!
const d = [{ _id:"a1", women:4, } ] const data =[ { foo:"foo1", data:{ _id:"a1", man:2 } }, { foo:"foo1", data:{ _id:"a1", man:2 } } ] var arr = data.map(function(obj, i){ d.map(function(o,i){ if(obj.data._id == o._id) { obj.data.women = o.women; } }); return obj; }); console.log(arr);Con las estructuras de datos que tiene, puede recorrer ambas y simplemente actualizar las entradas con la misma id . Dicho esto, esta es una solución de fuerza bruta con complejidad de tiempo O (n ^ 2). Esta solución también devuelve un nuevo objeto en lugar de mutar el original.
// Existing entries const entries = [ { data: { id: 'a1', man: 2 } }, { data: { id: 'a1', man: 2 } }, ]; // Data with same id to update const updates = [ { id: 'a1', women: 4 }, ]; /** * Update properties for an existing entry given * a list of partially updated entries */ function updateEntries(entriesList, updatesList) { // Build up new array as to not mutate // the existing data structure const newEntries = []; for (const entry of entriesList) { for (const update of updatesList) { // Update when the ids match if (entry.data.id === update.id) { newEntries.push({ data: { ...entry.data, ...update } }); } else { newEntries.push(entry); } } } return newEntries; } const newEntries = updateEntries(entries, updates); // newEntries = [ // { // data: { // id: 'a1', // man: 2, // women: 4 // } // }, // { // data: { // id: 'a1', // man: 2, // women: 4 // } // }, // ]; Si cambia su estructura de datos para que entries sean un objeto con cada entry organizada por id , suponiendo que en realidad deberían ser únicas de todos modos, puede obtener O (n) según updates .
// Entries by id const entries = { a1: { man: 2 }, a2: { man: 2 }, };