blow
blow

Reputation: 13209

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?

Upvotes: 6

Views: 10690

Answers (4)

JoshNaro
JoshNaro

Reputation: 2097

Try using,

array.splice(index, 1);

See Mastering JavaScript Arrays.

Upvotes: 10

Arvind Kumar Avinash
Arvind Kumar Avinash

Reputation: 79085

There can be many ways to do it. One of them is to create slices of the array excluding the index and then concatenate the slices.

var arr = ["A", "B", "C"];
const idx = 1;

//Before
console.log(arr);

arr = arr.slice(0, idx).concat(arr.slice(idx + 1));

//After
console.log(arr);

Upvotes: 0

olliej
olliej

Reputation: 36783

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.

Upvotes: 4

Kaivosukeltaja
Kaivosukeltaja

Reputation: 15735

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.

Upvotes: 2

Related Questions