2010-01-04 10 views
10

Me gustaría saber la forma más eficiente de vaciar una matriz asociativa sin causar ninguna pérdida de memoria (los valores son objetos js)javascript: eliminar todos los elementos de objeto de una matriz asociativa

Sólo para estar seguro, no tengo intenté iterar a través de los elementos de la matriz, llamando a la operación 'eliminar' para cada objeto del elemento, de modo que todos los objetos del elemento sean candidatos para la recolección de basura. Finalmente, reinicié la matriz assoc usando: somearray = {};

¿Es necesario llamar a la operación 'borrar' para cada elemento? ¿O basta con restablecer el valor de la variable para que todos los elementos sean basura?

Gracias!

Respuesta

7

Mientras no se haga referencia a sus objetos ni a la matriz asociativa en ningún otro lugar, debe restablecerse la matriz.

Llamar a delete en cada objeto solo es necesario en IE6 en un elemento DOM. Ver here

+1

Hola, gracias por la respuesta. Sin embargo, me gustaría aclarar más mi preocupación. Tengo una matriz asociativa que se utiliza para almacenar objetos de GMarker. Después de agregar cada objeto de GMarker a la matriz, también se agrega al mapa (usando el método GMap2.addOverlay()) Cuando quiero eliminar todos los marcadores del mapa, simplemente tengo que llamar al método GMap2.clearOverlays() . Pero aparte de esto, también tendría que borrar la matriz asociativa. ¿Significa esto que cuando reinicio la variable, todos los objetos contenidos eventualmente serán recolectados? Gracias de antemano – Erwin

+0

Sí, lo harán. En general, la mejor manera de averiguarlo es ejecutar su lógica un millón de veces en un bucle, y repetir el uso de la memoria en el Administrador de tareas. – SLaks

+0

Ya veo. Lo intentaré, entonces. ¡Gracias por la ayuda! – Erwin

3

somearray.length = 0 debería funcionar.

+0

Sospecho que aunque esto hará que la matriz se comporte como si estuviera vacía para casi todos los propósitos, todavía habrá claves numéricas colgando del objeto de la matriz, lo que evitará que se recopilen mientras se hace referencia a la matriz (y objetos nuevos) no han sido empujados a eso). Sin embargo, esta es una técnica útil para "borrar" una matriz que usted sabe que no persistirá por mucho tiempo. – mjh

+1

¡Las matrices asociativas NO TIENEN la propiedad de longitud! – Flot2011

+0

Intenta crearlo nuevamente somearray = new Array(); – Kld

Cuestiones relacionadas