He estado buscando una forma sencilla de copiar/insertar/mover propiedades en un objeto dentro de una matriz a otro objeto. Se me ocurrió una lógica básica que hace el trabajo a la perfección, pero no estoy satisfecho con esto. Tiene que haber una mejor manera, ¿alguna ayuda aquí?
var first = [ { "AGREE_EFF_DATE__0": "02-Aug-2018", "AGREE_TERM_DATE__0": "30-Apr-2021", "AGREE_IND__0": "P1", "P_DBAR_IND__0": "N", "AGREE_EFF_DATE__1": "01-May-2021", "AGREE_TERM_DATE__1": null, "AGREE_IND__1": "NP", "P_DBAR_IND__1": "N", "PROVIDER_SPECIALITY__0": "PSYCHOLOGY, CLINICAL", "PROVIDER_SPECIALITY_CODE__0": "CK" } ]; var second = [ { "STATUS": "ACTIVE", "MEDICARE_NUMBER" : 12345 } ]; for(let i = 0; i < second.length; i++) { var first_keys = Object.keys(first[i]); var first_values = Object.values(first[i]); for(let j = 0; j < first_keys.length; j++) { second[i][first_keys[j]] = first_values[j]; } } console.log(second); //Output- [ { STATUS: 'ACTIVE', MEDICARE_NUMBER: 12345, AGREE_EFF_DATE__0: '02-Aug-2018', AGREE_TERM_DATE__0: '30-Apr-2021', AGREE_IND__0: 'P1', P_DBAR_IND__0: 'N', AGREE_EFF_DATE__1: '01-May-2021', AGREE_TERM_DATE__1: null, AGREE_IND__1: 'NP', P_DBAR_IND__1: 'N', PROVIDER_SPECIALITY__0: 'PSYCHOLOGY, CLINICAL', PROVIDER_SPECIALITY_CODE__0: 'CK' } ]Cuando sea posible, debe preferir la iteración a los bucles indexados manualmente. Esto significa arr.map() o arr.forEach() o arr.reduce() , por nombrar algunos.
Además, puede usar una extensión de objetos para fusionar objetos fácilmente.
Poniéndolos juntos, puede reducir esta lógica a:
const result = first.map((firstObj, i) => ({ ...firstObj, ...second[i] })) Aquí map() sobre todos los miembros de first , lo que devuelve una nueva matriz donde cada miembro es el resultado de la función. Esta función toma el miembro de la matriz como primer argumento y el índice de ese miembro como segundo argumento. Entonces podemos usar ese índice para encontrar el elemento correspondiente en la segunda matriz.
Luego, simplemente extiende ambos objetos en un nuevo objeto para ensamblar el resultado final.
var first = [ { a: 1, b: 2 }, { a: 4, b: 5 }, ]; var second = [ { c: 3 }, { c: 6 }, ]; const result = first.map((firstObj, i) => ({ ...firstObj, ...second[i] })) console.log(result)Lo cual también es mecanografiado perfectamente válido .
NOTA: hay una diferencia entre mi código y el tuyo. Su código modifica los objetos en second . Mi código devuelve nuevos objetos y no cambia el contenido del second en absoluto.
Por lo general, esta es la mejor opción, pero depende de cómo use este valor y cómo se espera que fluyan los datos en su programa.
Debe tener cuidado con la iteración, ya que puede tener diferentes recuentos de elementos en la primera y segunda matriz. Entonces la posible solución será así:
const first = [ { "AGREE_EFF_DATE__0": "02-Aug-2018", "AGREE_TERM_DATE__0": "30-Apr-2021", "AGREE_IND__0": "P1", "P_DBAR_IND__0": "N", "AGREE_EFF_DATE__1": "01-May-2021", "AGREE_TERM_DATE__1": null, "AGREE_IND__1": "NP", "P_DBAR_IND__1": "N", "PROVIDER_SPECIALITY__0": "PSYCHOLOGY, CLINICAL", "PROVIDER_SPECIALITY_CODE__0": "CK" } ]; const second = [ { "STATUS": "ACTIVE", "MEDICARE_NUMBER": 12345 } ]; console.log(mergeAll(first, second)); function mergeAll(firstArray, secondArray) { const result = []; const minLength = firstArray.length < secondArray.length ? firstArray.length : secondArray.length; for (let i = 0; i < minLength; i++) { result.push({...firstArray[i], ...secondArray[i]}); } return result; }