Aparar as folhas de uma árvore de objetos

votos
0

Eu tenho esta árvore.

É um objeto multi-dimensional. Cada nó tem no máximo duas propriedades, que são datae children.

Aqui está um exemplo:

{Account: { data: ['stuff'], children: {
  share: {data: ['stuff'], children: {
    share name: {},
    share hold: { data: ['stuff'] }   
  }},
  card: { children: {
    card_access: { data: ['stuff'] } 
  }},
  loan: { children: {
    loan_name: {}
  }}
}}

Eu preciso remover todos os nós que não têm um dataatributo e também não tem quaisquer crianças com um dataatributo.

Assim, o exemplo acima seria:

{Account: { data: ['stuff'], children: {
  share: {data: ['stuff'], children: {
    share hold: { data: ['stuff'] }   
  }},
  card: { children: {
    card_access: { data: ['stuff'] } 
  }},
}}

Qual é a maneira mais concisa de conseguir isso em JS?

Publicado 22/07/2015 em 20:23
usuário
Em outras línguas...                            


1 respostas

votos
1

Isso faz o truque:

function trimEmpty(obj) {
  for(var o in obj) {
    if(typeof obj[o] === 'object') trimEmpty(obj[o]);
    if(JSON.stringify(obj[o]) === '{}') delete obj[o];
  }
} //trimEmpty

trimEmpty(obj);

trecho:

var obj = {
  Account: {
    data: ['stuff'],
    children: {
      share: {
        data: ['stuff'],
        children: {
          share_name: {},
          share_hold: {
            data: ['stuff']
          }
        }
      },
      card: {
        children: {
          card_access: {
            data: ['stuff']
          }
        }
      },
      loan: {
        children: {
          loan_name: {}
        }
      }
    }
  }
}

function trimEmpty(obj) {
  for(var o in obj) {
    if(typeof obj[o] === 'object') trimEmpty(obj[o]);
    if(JSON.stringify(obj[o]) === '{}') delete obj[o];
  }
} //trimEmpty

trimEmpty(obj);
document.querySelector('pre').innerHTML= JSON.stringify(obj, null, 2);
<pre></pre>

Respondeu 22/07/2015 em 20:41
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more