Necesito ayuda para resolver esto :)
Quiero transferir el objeto a una matriz. El resultado esperado debe ser:
result = [ { id: 'test-1', message: 'test#1.1' }, { id: 'test-1', message: 'test#1.2' }, { id: 'test-2', message: 'test#2.1' }, { id: 'test-2', message: 'test#2.2' } ]Mi solución aparente es con objects.keys() y map(). Desafortunadamente, esto no funciona como se desea:
mockData = { 'test-1': [ { message: 'test#1.1' }, { message: 'test#1.2' } ], 'test-2': [ { message: 'test#2.1' }, { message: 'test#2.2' } ] } const result = Object.keys(this.mockData).map((id) => { return { id, ...this.mockData[id], } }) console.log(result)¿Tengo que poner otro mapa () sobre this.mockData[id]? ¿Qué estoy haciendo mal y cuál es la mejor práctica aquí (¿tal vez reducir ()?)?
Espero que puedas ayudarme
Para desagrupar, puede flatMap un mapa plano de las entradas de Object.entries del objeto agrupado con una llamada map() anidada sobre los elementos de matriz agrupados.
const mockData = { 'test-1': [{ message: 'test#1.1' }, { message: 'test#1.2' }], 'test-2': [{ message: 'test#2.1' }, { message: 'test#2.2' }] }; const result = Object.entries(mockData).flatMap(([id, vs]) => vs.map(v => ({ id, ...v }))); console.log(result); O usando un bucle for...of si prefieres
const mockData = { 'test-1': [{ message: 'test#1.1' }, { message: 'test#1.2' }], 'test-2': [{ message: 'test#2.1' }, { message: 'test#2.2' }] }; const result = []; for (const [id, messages] of Object.entries(mockData)) { for (const message of messages) { result.push({ id, ...message }); } } console.log(result);Esto devolverá la solución deseada,
const arr = []; Object.keys(mockData).forEach((key) => { mockData[key].forEach((data) => { arr.push({ id: key, message: data.message }) }) })Object.keys(mockData) .map((id) => mockData[id].map((l) => { return { ...l, id }; }) ) .flat()