hola, tengo dos matrices, quiero fusionar dos matrices, ¿alguien puede ayudarme, por favor, he usado for loop empujando esos valores pero está creando duplicados?
const firstArray = [ { first: "01", data: [{ id: "012345" }, { id: "0123456" }, { id: "0123457" }] }, { first: "02", data: [{ id: "9998989" }, { id: "1223" }, { id: "345666" }] }, { first: "03", data: [{ id: "567888" }, { id: "2345" }, { id: "09876" }] } ]; const secondArray = [{ data: "abc" }, { data: "efg" }, { data: "hij" }];Necesito un resultado como este, ¿alguien puede?
[ { first: "01", data: [ { id: "012345", data: "abc" }, { id: "0123456", data: "efg" }, { id: "0123457", data: "hij" }, ], }, { first: "02", data: [ { id: "9998989", data: "abc" }, { id: "1223", data: "efg" }, { id: "345666", data: "hij" }, ], }, { first: "03", data: [ { id: "567888", data: "abc" }, { id: "2345", data: "efg" }, { id: "09876", data: "hij" }, ], }, ];En lugar de usar bucles anidados para construir su matriz desde cero, puede usar dos métodos .map() . Uno para mapear sus objetos externos en firstArray a nuevos objetos con un nuevo valor data y otro para mapear sus data a una versión fusionada de los datos en secondArray . Para fusionar, puede tomar el objeto correspondiente de secondArray usando el índice y luego usando la sintaxis de propagación para fusionar ambos objetos:
const firstArray = [ { first: "01", data: [{ id: "012345" }, { id: "0123456" }, { id: "0123457" }] }, { first: "02", data: [{ id: "9998989" }, { id: "1223" }, { id: "345666" }] }, { first: "03", data: [{ id: "567888" }, { id: "2345" }, { id: "09876" }] } ]; const secondArray = [{ data: "abc" }, { data: "efg" }, { data: "hij"}]; const res = firstArray.map(obj => ({ ...obj, data: obj.data.map((inner, i) => ({...inner, ...secondArray[i]})) })); console.log(res);Para corregir su implementación actual, puede crear dos matrices, una fuera de su bucle for como ya lo está haciendo actualmente, y luego otra dentro de su primer bucle for. La matriz interna representará su nueva matriz de datos, que luego puede actualizar para su objeto actual:
const firstArray = [{ first: "01", data: [{ id: "012345" }, { id: "0123456" }, { id: "0123457" }] }, { first: "02", data: [{ id: "9998989" }, { id: "1223" }, { id: "345666" }] }, { first: "03", data: [{ id: "567888" }, { id: "2345" }, { id: "09876" }] } ]; const secondArray = [{ data: "abc" }, { data: "123" }, { data: "xyz" }]; const emptyArray = []; for (let i = 0; i < firstArray.length; i++) { const data = firstArray[i].data; const dataArray = []; for (let j = 0; j < data.length; j++) { const newObject = { ...data[j], ...secondArray[j] }; dataArray.push(newObject); } emptyArray.push({...firstArray[i], data: dataArray}); } console.log(emptyArray);Suponiendo que la matriz data y el tamaño de la segunda matriz sean iguales. Use llamadas de métodos de map anidados para construir la agregación
const firstArray = [ { first: "01", data: [{ id: "012345" }, { id: "0123456" }, { id: "0123457" }], }, { first: "02", data: [{ id: "9998989" }, { id: "1223" }, { id: "345666" }], }, { first: "03", data: [{ id: "567888" }, { id: "2345" }, { id: "09876" }], }, ]; const secondArray = [{ data: "abc" }, { data: "efg" }, { data: "hij" }]; const output = firstArray.map(({ first, data }) => ({ first, data: data.map((item, i) => ({ ...item, ...secondArray[i] })), })); console.log(output)Puede lograr fácilmente el resultado usando el mapa en js
const firstArray = [ { first: "01", data: [{ id: "012345" }, { id: "0123456" }, { id: "0123457" }], }, { first: "02", data: [{ id: "9998989" }, { id: "1223" }, { id: "345666" }], }, { first: "03", data: [{ id: "567888" }, { id: "2345" }, { id: "09876" }], }, ]; const secondArray = [{ data: "abc" }, { data: "efg" }, { data: "hij" }]; const result = firstArray.map((obj) => ({ ...obj, data: obj.data.map((o, i) => ({ ...o, ...secondArray[i] })), })); console.log(result);