2013-01-15 7 views
6

Ho un oggetto albero come di seguito, sto cercando di rimuovere la proprietà dell'array items se è vuota. Non sono sicuro dell'approccio migliore per farlo?Qual è il modo migliore per rimuovere una proprietà dall'oggetto javascript annidato?

Sto pensando di scorrere la chiave, controllare la proprietà e quindi rimuovere usando delete myJSONObject[prop] ... Qualche idea/idea sono i benvenuti?

[{ 
    text: "TreeRoot", 
    items: [{ 
     text: "Subgroup1", 
     items: [] 
    }, { 
     text: "Subgroup2", 
     items: [] 
    }, { 
     text: "Subgroup3", 
     items: [], 
     items: [{ 
      text: "subgroup5", 
      items: [{ 
       text: "subgroup6", 
       items: [{ 
        text: "subgroup7", 
        items: [{ 
         text: "subgroup8", 
         items: [] 
        }] 
       }] 
      }] 
     }] 
    }] 
}] 
+0

avrei bu ho creato un nuovo oggetto, piuttosto che provare a modificare questo. –

+0

Ehi, hai già risolto questo? – Gideon

+0

http://stackoverflow.com/questions/9446426/how-do-you-recursively-remove-nested-objects-that-taintain-an-empty-array – J4S0Nc

risposta

1

Si può avere un algoritmo ricorsivo che ad ogni passo o rimuove items array e restituisce, o ricorsivamente elabora ogni singolo oggetto dell'array.

Vorrei anche provare a farlo sul lato server. Risparmierà molta complessità, memoria e tempo di elaborazione. Esistono solitamente modi per "escludere" gli array vuoti dalla stringa codificata JSON.

1

Questo dovrebbe fare il lavoro (ES5):

function removeEmpty(obj) { 
    Object.keys(obj).forEach(function(key) { 
    (key === 'items' && obj[key].length === 0) && delete obj[key] || 
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) 
    }); 
    return obj; 
}; 

JSBIN

stessi in ES6:

const removeEmpty = (obj) => { 
    Object.keys(obj).forEach(key => 
    (key === 'items' && obj[key].length === 0) && delete obj[key] || 
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) 
); 
    return obj; 
}; 

JSBIN

Problemi correlati