Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best way to delete element from array without rearrange it

I have to delete some elements of my array, but without rearrange array.

If I use "delete" to delete my elements, the "holes" take up memory?

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

I think the deleted element is really deleted so it isn't take up memory space, isn't true?

like image 431
blow Avatar asked Oct 28 '09 19:10

blow


3 Answers

Try using,

array.splice(index, 1);

See Mastering JavaScript Arrays.

like image 56
JoshNaro Avatar answered Nov 15 '22 05:11

JoshNaro


Entirely implementation dependent. Internally all JS representations will eventually convert to a sparse representation, but the sparese representation tends to use more memory per element and be slower to access than the non-sparse array.

For this reason removing onevalue from a dense array is unlikely to releas any memory, but after a sufficient set of elements are removed the implementation will likely convert to a sparse representation to save memory overall.

Note: the object or value at the index you delete won't be deleted immediately -- delete simply removes the property slot from the object -- the object/value will only be removed during a GC pass, and only if there are no other references.

like image 22
olliej Avatar answered Nov 15 '22 06:11

olliej


You can use array.splice(1, 1); It will remove one entry at index 1. The first parameter is the index, the second one is the count.

like image 41
Kaivosukeltaja Avatar answered Nov 15 '22 07:11

Kaivosukeltaja