2009-10-28 13 views
6

Tengo que eliminar algunos elementos de mi matriz, pero sin reorganizar la matriz.La mejor manera de eliminar elemento de la matriz sin reorganizarlo

Si utilizo "eliminar" para eliminar mis elementos, los "agujeros" ocupan la memoria?

var array=["A","B","C"]; 
delete array[1]; // array -> ["A", undefined, "C"] 

Creo que el elemento eliminado es realmente eliminado por lo que no se toma el espacio de memoria, no es verdad?

Respuesta

4

Totalmente dependiente de la implementación. Internamente, todas las representaciones de JS eventualmente se convertirán en una representación dispersa, pero la representación de sparese tiende a usar más memoria por elemento y a ser más lenta de acceder que la matriz no dispersa.

Por esta razón, eliminar un valor de una matriz densa es poco probable que libere memoria, pero después de eliminar un conjunto suficiente de elementos la implementación probablemente se convierta en una representación dispersa para ahorrar memoria en general.

Nota: el objeto o valor en el índice que elimine no se eliminará inmediatamente - eliminar simplemente elimina el espacio de propiedad del objeto - el objeto/valor solo se eliminará durante un pase GC, y solo si no hay otras referencias

3

Puede utilizar array.splice(1, 1); Se eliminará una entrada en el índice 1. El primer parámetro es el índice, el segundo es el recuento.

+1

sin REARRANCARlo, por lo que empalme no es lo que busco. – blow

9

Trate de usar,

array.splice(index, 1); 

Ver Mastering JavaScript Arrays.

+0

sin REARRANGE it, entonces empalme no es lo que busco. – blow

+3

La matriz no se reorganiza con empalme, el índice se elimina por completo. ¿Quiere decir que no desea eliminar el índice de la matriz? Si es así, simplemente configure el valor en ese índice como nulo. – JoshNaro

Cuestiones relacionadas