Κοπή τα φύλλα από ενός δέντρου αντικειμένου

ψήφοι
0

Έχω αυτό το «δέντρο».

Πρόκειται για ένα πολυδιάστατο αντικείμενο. Κάθε «κόμβος» έχει το πολύ δύο ιδιότητες, οι οποίες είναι dataκαι children.

Εδώ είναι ένα παράδειγμα:

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

Θα πρέπει να αφαιρέσετε τυχόν κόμβους που δεν έχουν dataτις ιδιότητες και επίσης δεν έχουν παιδιά με ένα dataχαρακτηριστικό.

Έτσι, το παραπάνω παράδειγμα θα γίνει:

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

Ποιος είναι ο πιο συνοπτικό τρόπο για να επιτευχθεί αυτό το JS;

Δημοσιεύθηκε 22/07/2015 στις 20:23
χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Αυτό κάνει το κόλπο:

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);

απόσπασμα:

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>

Απαντήθηκε 22/07/2015 στις 20:41
πηγή χρήστη

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