Tengo la siguiente matriz anidada que debo preservar y mantener igual, pero también adjunto una propiedad llamada indexes a cada objeto de items anidados que almacena una lista de índices de arriba hacia abajo para que pueda realizar un seguimiento de los elementos anidados cuando aplano la matriz y usarlo en otra parte de mi aplicación. La estructura se ve así:
[ { cat: '1' items: [ { media: [ { type: 'image' } ] }, { media: [ { type: 'image' } ] }, { media: [ { type: 'image' } ] } ] }, { cat: '2', items: [ { media: [ { type: 'image' }, { type: 'image' } ] } ] }, { cat: '3', items: [ { media: [ { type: 'image' } ] } ] } ]; Y me gustaría que se viera como lo siguiente, donde los indexes comienzan en 0 para el primer elemento, y para cada ocurrencia dentro de la matriz de media , se adjunta un número creciente y se vincula como una propiedad.
[ { cat: '1', items: [ { indexes: [0], media: [ { type: 'image' } ] }, { indexes: [1], media: [ { type: 'image' } ] }, { indexes: [2], media: [ { type: 'image' } ] } ] }, { cat: '2', items: [ { indexes: [3, 4], media: [ { type: 'image' }, { type: 'image' } ] } ] }, { cat: '3', items: [ { indexes: [5], media: [ { type: 'image' } ] } ] } ];¿Cuál es la mejor manera de hacer esto?
En mi opinión, la forma más elegante sería recorrer todos los elementos mediante un bucle forEach .
const cats = [{ cat: '1', items: [{ media: [{ type: 'image' }] }, { media: [{ type: 'image' }] }, { media: [{ type: 'image' }] } ] }, { cat: '2', items: [{ media: [{ type: 'image' }, { type: 'image' } ] }] }, { cat: '3', items: [{ media: [{ type: 'image' }] }] } ]; let totalIndex = 0 cats.forEach(cat => { cat.items.forEach(item => { item.indexes = item.media.map(() => totalIndex++) }) }) console.log(cats)