JavaScript Rimozione di tutti gli elementi


Esempio

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

Metodo 1

Crea una nuova matrice e sovrascrive il riferimento dell'array esistente con uno nuovo.

arr = [];

Si deve prestare attenzione in quanto ciò non rimuove alcun elemento dall'array originale. La matrice potrebbe essere stata chiusa quando passata a una funzione. L'array rimarrà in memoria per la durata della funzione, anche se potresti non essere a conoscenza di ciò. Questa è una fonte comune di perdite di memoria.

Esempio di una perdita di memoria risultante da una cancellazione di array errata:

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

Per evitare il rischio di una perdita di memoria, utilizzare uno dei seguenti 2 metodi per svuotare l'array nel ciclo while del precedente esempio.

Metodo 2

L'impostazione della proprietà length cancella tutti gli elementi dell'array dalla nuova lunghezza dell'array alla vecchia lunghezza dell'array. È il modo più efficace per rimuovere e dereferenziare tutti gli elementi dell'array. Mantiene il riferimento alla matrice originale

arr.length = 0;

Metodo 3

Simile al metodo 2 ma restituisce un nuovo array contenente gli elementi rimossi. Se non sono necessari gli articoli questo metodo è inefficiente in quanto il nuovo array viene ancora creato solo per essere immediatamente dereferenziato.

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

Domanda correlata