2010-01-04 18 views
10

desidero sapere il modo più efficiente di svuotamento un array associativo senza causare alcuna perdita di memoria (i valori sono oggetti js)javascript: rimuovere tutti gli elementi oggetto di un array associativo

Per sicurezza, ho ha provato a scorrere gli elementi dell'array, chiamando l'operazione 'cancella' per ogni oggetto elemento, in modo che tutti gli oggetti elemento diventino candidati per la garbage collection. Infine, ho ripristinato l'array assoc utilizzando: somearray = {};

È necessario chiamare l'operazione "Elimina" per ciascun elemento? Oppure il reset del valore della variabile è sufficiente in modo che tutti gli elementi vengano raccolti?

Grazie!

risposta

7

Fintantoché né gli oggetti né l'array associativo vengono referenziati da nessun'altra parte, è necessario eseguire il reset dell'array.

Chiamare delete su ciascun oggetto è necessario solo in IE6 su un elemento DOM. Vedere here

+1

Ciao, grazie per la risposta. Tuttavia, vorrei chiarire ulteriormente la mia preoccupazione. Ho una matrice associativa che viene utilizzata per la memorizzazione di oggetti GMarker. Dopo aver aggiunto ogni oggetto GMarker all'array, viene anche aggiunto alla mappa (utilizzando il metodo GMap2.addOverlay()) Quando voglio rimuovere tutti i marcatori dalla mappa, dovrei semplicemente chiamare il metodo GMap2.clearOverlays() . Ma a parte questo, dovrei anche cancellare l'array associativo. Significa che quando reimposto la variabile, tutti gli oggetti contenuti verranno eliminati? Grazie in anticipo – Erwin

+0

Sì, lo faranno. In generale, il modo migliore per scoprirlo è eseguire la logica un milione di volte in un ciclo e eseguire un ciclo di utilizzo della memoria in Task Manager. – SLaks

+0

Vedo. Ci proverò, allora. Grazie per l'aiuto! – Erwin

3

somearray.length = 0 dovrebbe funzionare.

+0

Sospetto che anche se questo renderà l'array _behave_ like è vuoto per quasi tutti gli scopi, ci saranno ancora chiavi numeriche che pendono dall'array object, che impedirà che vengano raccolte mentre l'array è ancora referenziato (e nuovi oggetti non sono stati spinti dentro). Questa è una tecnica utile, però, per "cancellare" un array che, come sai, non durerà a lungo. – mjh

+1

Gli array associativi NON HANNO la proprietà length! – Flot2011

+0

Prova a crearlo nuovamente somearray = new Array(); – Kld

Problemi correlati