How to leave an empty array (delete all elements) in Javascript?

Asked

Viewed 377 times

-2

I have an array of objects and want to leave it empty by removing all its elements. How do I ?

let arr = [1, 2, 3, 4, 5];
  • 2

    It’s much easier and faster you assign [] to the variable that contained the list of objects. If you want to delete one by one, you can loop: while (matrix.length > 0) matrix.shift();

  • You can only assign an empty array, as Exp said, or use the method shift thus: array.shift(0, array.length).

  • as @epx commented, nome-da-variavel = [] or nome-da-variavel.length = 0

  • 2

    @Jeanextreme002, the method Array.prototype.shift has no such arguments.

  • Thank you guys for your help

  • @Luizfelipe Oops, was splice. I got confused at the time, sorry. Correction: array.splice(0, array.length)

Show 1 more comment

1 answer

8


Regardless of the values of an array, they are valid methods to empty an array arr:

Alternative 1: Reset the variable (or property) to an empty array

arr = [];

This code will reset the variable arr for a new empty array. Note that the same thing can also be done if it is set in an object property.

It is ideal if you have no other references to the original array arr, since that nay modifies the original array, only replaces it with a new, empty one.

It is important to be careful with this alternative given that if you have references to the array arr in other parts of your code, they will remain unchanged. In short, use this alternative only when you are not keeping other references to the original array - which is not, in fact, being emptied, just replaced in one (and not all) given location.

This is the fastest alternative.

And this code shows the reference problem if due care is not taken:

let arr1 = ['a', 'b', 'c', 'd', 'e', 'f'];
let arr2 = arr1;  // Referência à `arr1` em outra variável. 

// Note que estamos apenas substituindo o valor da variável `arr1`.
// Não estamos, de fato, apagando nenhum dos elementos do array.
arr1 = [];

console.log(arr2); //=> ['a', 'b', 'c', 'd', 'e', 'f']

Note also that if the array has been declared with const, cannot use this alternative. However, modifications to the array itself are still valid as explained here and here.

All of the following solutions will modify the original array (and therefore reflect changes in all references).

Alternative 2: Reset the property length

arr.length = 0;

This will clear the existing array by setting its property length to zero. Basically, the property length of arrays is a Setter which, when changed, is able to modify the array to suit the new value.

Alternative 3: Array.prototype.splice

arr.splice(0, arr.length);

Use the method Array.prototype.splice will work perfectly to remove all items from arr. However, as this method returns an array with all items removed, will eventually return a copy of the original array (since all have been removed). However, benchmarks demonstrate that this does not imply any additional cost in performance.

Alternative 4: To be used Array.prototype.pop until emptying the array

while (arr.length) {
  arr.pop();
}

This solution uses the Array.prototype.pop to remove the last element of the array. Loop is used while to repeat the removal of the final elements until the array has been completely emptied.

This solution is not very succinct and is also the least performative of all presented.

Considerations on performance

Of all the alternatives presented above, 1 is the fastest, since it does not delete the array itself. Only modifies the variable that contained it with a new empty array.

However, when deleting elements from the original array is really necessary, alternatives 2 and 3 are very similar in performance and are significantly superior to alternative 4. For results, refer to this benchmark.


This is an adaptation of this excellent collective effort (response) Stack Overflow in English.

  • 1

    Thanks for the help Luiz.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.