Tengo una matriz anidada de objetos con el siguiente formato
const arr1 = [ { name: "internalcorp.com", children: [ { name: "internalcorp.com.child1", children: [ { name: "internalcorp.com.grandchild1", children: [] }, { name: "internalcorp.com.grandchild2", children: [] } ] }, { name: "internalcorp.com.child2", children: [] } ] }, { name: "internalcorpwebsite.com", children: [ { name: "internalcorpwebsite.com.child1", children: [] } ] } ]; Necesita agregar una propiedad className a cada objeto de matriz en función de su nivel. Como por ejemplo, el padre debe tener level-0 group y los elementos secundarios deben tener level-x leaf donde x es el número de nivel relativo al padre principal.
La salida debería verse como
const result = [ { name: "internalcorp.com", className: "level-0 group", children: [ { name: "internalcorp.com.child1", className: "level-1 leaf", children: [ { name: "internalcorp.com.grandchild1", className: "level-2 leaf", children: [] }, { name: "internalcorp.com.grandchild2", className: "level-2 leaf", children: [] } ] }, { name: "internalcorp.com.child2", className: "level-1 leaf", children: [] } ] }, { name: "internalcorpwebsite.com", className: "level-0 group", children: [ { name: "internalcorpwebsite.com.child1", className: "level-1 leaf", children: [], } ], } ];Código que he probado
const result = arr1.map((item,idx)=> { if(item.children.length){ return { ...item, className: `level${idx} leaf` } } })Puedes usar el poder de la recursividad:
function recursive(item, id) { let returnedItem = item if (item.children.length) { returnedItem = { ...returnedItem, children: returnedItem.children.map(childItem => recursive(childItem, id + 1)) } } if (0 === id) { return { ...returnedItem, className: `level-0 group` } } return { ...returnedItem, className: `level-${id} leaf` } } const result = arr1.map(item => recursive(item, 0))