JavaScript Supprimer tous les éléments


Exemple

var arr = [1, 2, 3, 4];

Méthode 1

Crée un nouveau tableau et remplace la référence de tableau existante par un nouveau.

arr = [];

Des précautions doivent être prises car cela ne supprime aucun élément du tableau d'origine. Le tableau peut avoir été fermé lorsqu'il est passé à une fonction. Le tableau restera en mémoire pendant toute la durée de la fonction, mais vous ne le savez peut-être pas. C'est une source courante de fuites de mémoire.

Exemple de fuite de mémoire résultant d'un effacement de matrice incorrect:

var count = 0;

function addListener(arr) { // arr is closed over
  var b = document.body.querySelector("#foo" + (count++));
  b.addEventListener("click", function(e) { // this functions reference keeps
    // the closure current while the
    // event is active
    // do something but does not need arr       
  });
}

arr = ["big data"];
var i = 100;
while (i > 0) {
  addListener(arr); // the array is passed to the function
  arr = []; // only removes the reference, the original array remains
  array.push("some large data"); // more memory allocated
  i--;
}
// there are now 100 arrays closed over, each referencing a different array
// no a single item has been deleted

Pour éviter le risque de fuite de mémoire, utilisez l'une des 2 méthodes suivantes pour vider le tableau dans la boucle while de l'exemple ci-dessus.

Méthode 2

La définition de la propriété length supprime tous les éléments du tableau de la nouvelle longueur du tableau à l’ancienne longueur du tableau. C'est le moyen le plus efficace de supprimer et de déréférencer tous les éléments du tableau. Conserve la référence au tableau d'origine

arr.length = 0;

Méthode 3

Similaire à la méthode 2 mais renvoie un nouveau tableau contenant les éléments supprimés. Si vous n'avez pas besoin des éléments, cette méthode est inefficace car le nouveau tableau est toujours créé pour être immédiatement déréférencé.

arr.splice(0); // should not use if you don't want the removed items
// only use this method if you do the following
var keepArr = arr.splice(0); // empties the array and creates a new array containing the
                             // removed items

Question connexe