aquí hay datos simples, quiero eliminar recursivamente el atributo de los niños si el atributo de los niños representa una matriz vacía.
[{"name":"code","created":"2022-03-27T05:42:28.977Z","children":[],"path":"623ff9881a6e94547deaebed"}]mi código es como se muestra
function removeMeta(obj) { let keys = Object.keys(obj); for(let key in keys) { console.log('.......',key,obj[key]); if(typeof(obj[key]) == 'object'){ removeMeta(obj[key]); }else if( key == 'children' && obj[key] ==[]){ delete obj[key]; } } }pero no parece funcionar, alguna idea
Estos son los problemas:
El typeof de propiedad de los niños será 'objeto', por lo que su código nunca realizará la delete .
Elimine el else de else if , de modo que if siempre se ejecute.
obj[key] ==[] siempre será falso, ya que se compara con una matriz recién creada, por referencia. En su lugar, compruebe la longitud:
obj[key].length == 0 El bucle for debe ser un bucle for..of , no un bucle for..in
Corregido:
function removeMeta(obj) { let keys = Object.keys(obj); for(let key of keys) { if(typeof(obj[key]) == 'object'){ removeMeta(obj[key]); } if( key == 'children' && obj[key].length == 0){ delete obj[key]; } } } let arr = [{"name":"code","created":"2022-03-27T05:42:28.977Z","children":[],"path":"623ff9881a6e94547deaebed"}]; removeMeta(arr); console.log(arr);