Reputation: 13209
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
Reputation: 2097
Try using,
array.splice(index, 1);
See Mastering JavaScript Arrays.
Upvotes: 10
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
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
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