2013-03-16 15 views
33

Ho un array di JSON, che sembra qualcosa di simile:Rimuovere elemento da JSON oggetto

{ 
    "id": 1, 
    "children": [ 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }] 
} 

Vorrei avere una funzione che rimuove gli elementi che ha i "bambini" vuota. Come posso farlo? Non sto chiedendo per la risposta, solo suggerimenti

+0

Attenzione: i = '' segni accenno a JSON valido – rjz

+2

@magritte smetterla con questa domanda ridondante. ha detto che sta chiedendo suggerimenti. non la risposta/ –

+0

@rjz, sì quelli = dovrebbe essere: ... –

risposta

51

Per scorrere le chiavi di un oggetto, utilizzare un for .. in ciclo:

for (var key in json_obj) { 
    if (json_obj.hasOwnProperty(key)) { 
     // do something with `key' 
    } 
} 

Per provare tutti gli elementi per i bambini vuoti, è possibile utilizzare un approccio ricorsivo: scorrere tutti gli elementi e testare i loro bambini in modo ricorsivo.

Rimozione di una proprietà di un oggetto può essere fatto utilizzando la parola chiave delete:

var someObj = { 
    "one": 123, 
    "two": 345 
}; 
var key = "one"; 
delete someObj[key]; 
console.log(someObj); // prints { "two": 345 } 

Documentazione:

+9

+1 ... Ho fatto il codice Javascript da anni e non sapevo nemmeno che esistesse l'operatore [delete] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/delete) ?! – Emissary

+1

Penso che dovrebbe usare il metodo splice() piuttosto che cancellare dato che i bambini sono tenuti in un array? – magritte

+0

@magritte Ha ascoltato sia gli array che gli oggetti. Sto aspettando qualche chiarimento, ma sì, se ci sono matrici può usare 'splice' per rimuovere elementi o usare [' filter'] (https://developer.mozilla.org/en-US/docs/JavaScript/ Riferimento/Global_Objects/Array/filter) per iterare e rimuovere elementi. – Lekensteyn

1

JSfiddle

function deleteEmpty(obj){ 
     for(var k in obj) 
     if(k == "children"){ 
      if(obj[k]){ 
        deleteEmpty(obj[k]); 
      }else{ 
        delete obj.children; 
       } 
     } 
    } 

for(var i=0; i< a.children.length; i++){ 
deleteEmpty(a.children[i]) 
}