Tengo una matriz con datos:
const data = [ { groupName: 'groupName1', types: [ { name: 'name1', displayName: 'displayName1' }, { name: 'name2', displayName: 'displayName2' }, ] }, { groupName: 'groupName2', types: [ { name: 'name3', displayName: 'displayName3' }, { name: 'name4', displayName: 'displayName4' }, ] }, ]Necesito transformar esta matriz para que se agregue un campo groupName adicional a cada objeto. La salida debe ser una matriz con objetos como se muestra a continuación:
const resultData = [ { groupName: 'groupName1', name: 'name1', displayName: 'displayName1' }, { groupName: 'groupName1', name: 'name2', displayName: 'displayName2' }, { groupName: 'groupName2', name: 'name3', displayName: 'displayName3' }, { groupName: 'groupName2', name: 'name4', displayName: 'displayName4' }, ]Traté de hacerlo a través del método de matriz de mapas
const data = [{"groupName":"groupName1","types":[{"name":"name1","displayName":"displayName1"},{"name":"name2","displayName":"displayName2"}]},{"groupName":"groupName2","types":[{"name":"name3","displayName":"displayName3"},{"name":"name4","displayName":"displayName4"}]}] const resultData = data.map((item) => { item.types.map((item1) => { return { ...item1, groupName: item.groupName } }) return item }) console.log(resultData)Pero esto no devuelve la matriz que necesito. Dígame cómo puedo transformar esta matriz para que cada objeto tenga la estructura correcta. ¡Gracias de antemano!
Reemplace la llamada externa Array.map() con Array.flatMap() para crear una matriz plana y devolver el resultado de la llamada interna del mapa, y no el elemento original.
const data = [{"groupName":"groupName1","types":[{"name":"name1","displayName":"displayName1"},{"name":"name2","displayName":"displayName2"}]},{"groupName":"groupName2","types":[{"name":"name3","displayName":"displayName3"},{"name":"name4","displayName":"displayName4"}]}] const resultData = data.flatMap(({ types, groupName }) => types.map(item => ({ ...item, groupName })) ) console.log(resultData)Yo usaría reduce .
data.reduce((carry, {types, groupName}) => carry.concat(types.map(d => ({...d, groupName}))), []);