2013-03-03 16 views
7

Come precisato Here, sembra che il modo più efficiente per svuotare una matrice esistente (e non assegnare uno nuovo) in JavaScript è usare:Qual è il modo più efficiente per svuotare un oggetto normale in javascript?

array.length = 0; 

fa lo stesso lavoro di oggetti grafici semplici? (aka "array associativi" o "dizionari") In caso contrario, qual è il modo più efficace per vuoto un oggetto javascript esistente?

Penso che allocarne uno nuovo non sia l'opzione migliore, dato che sposterà un po 'di lavoro in più al garbage collector e assegnerà una nuova memoria nello heap, ma potrei sbagliarmi.

Ho bisogno di una soluzione che funzioni almeno con Chrome e Firefox.

+0

Non sembra. Lunghezza = 0 funziona per gli array associativi (http://jsfiddle.net/7XVym/). – awbergs

+3

JS non ha matrici associative. Intendi oggetti? –

+0

Non puoi semplicemente fare 'array = null;'? – insertusernamehere

risposta

22

Il modo più semplice per farlo è creare un nuovo oggetto. Finiresti per spazzatura raccogliendo tutte le proprietà comunque.

var foo = { 
    a: 5, 
    b: 4 
}; 
foo = {}; 

Si potrebbe anche un'iterazione sulle proprietà e rimuovere singolarmente:

for (var prop in foo) { 
    if (foo.hasOwnProperty(prop)) { 
     delete foo[prop]; 
    } 
} 

E 'anche la pena sottolineare, come una questione di verbosità, che JavaScript ha oggetti con proprietà, non matrici associative.

+3

Si noti che 'foo = {}' crea un nuovo oggetto e ** lascia l'oggetto originale così com'è **. Questo fa la differenza quando ci sono altri riferimenti all'oggetto originale: 'var foo = {a: 5, b: 4}; var bar = foo; foo = {}; ' Alla fine,' bar'is ancora '{a: 5, b4}' e ** not ** '{}' come ci si potrebbe aspettare. – Ignitor

Problemi correlati