Estoy tratando de cambiar objetos en funciones de mapas anidados. Tengo una matriz de objetos con datos anidados.
Si trato de hacerlo de esta manera, la estructura de los datos está cambiando. Estoy obteniendo una matriz de matrices. Solo lo que necesito aquí es agregar para cada objeto una propiedad "nivel". ¿Es posible hacer esto con funciones de mapas anidados?
const res = data.map(itemA => ({ ...itemA, level: 'a' }) .subA.map(itemB => ({ ...itemB, level: 'b' }))) console.log(res) <script> let data = [{ name: 'testA1', subA: [{ name: 'testB1', subB: [{ name: 'testC1', subC: [] }] }, { name: 'testB2', subB: [{ name: 'testC1', subC: [] }] } ] }, { name: 'testA2', subA: [{ name: 'testB1', subB: [{ name: 'testC1', subC: [{ name: 'testD1', subD: [] }] }] }] } ] </script>¿Puedes usar una función recursiva?
let data = [{ name: 'testA1', subA: [{ name: 'testB1', subB: [{ name: 'testC1', subC: [] }] }, { name: 'testB2', subB: [{ name: 'testC1', subC: [] }] } ] }, { name: 'testA2', subA: [{ name: 'testB1', subB: [{ name: 'testC1', subC: [{ name: 'testD1', subD: [] }] }] }] } ] function addprop(arr, level){ arr.map(x=>{ const match = Object.keys(x).find(element => { if (element.includes('sub')) { return true; } }); addprop(x[match], level+1) }) return arr.map(x=>(x.level=level,x)) } console.log(addprop(data, 1))En realidad lo hice de esta manera:
const res = data.map(itemA => ( {...itemA, level: 'a', subA: itemA.subA.map(itemB => ( {...itemB, level: 'b', subB: itemB.subB.map(itemC => ( {...itemC, level: 'c'} ))} ))} )) console.log(res) <script> let data = [{ name: 'testA1', subA: [{ name: 'testB1', subB: [{ name: 'testC1', subC: [] }] }, { name: 'testB2', subB: [{ name: 'testC1', subC: [] }] } ] }, { name: 'testA2', subA: [{ name: 'testB1', subB: [{ name: 'testC1', subC: [{ name: 'testD1', subD: [] }] }] }] } ] </script>