7
votes

Meilleure façon de distribuer un tableau de tableau en JavaScript

Quelle est la meilleure façon de distribuer une gamme de tableau en JavaScript afin de vous assurer que aucune fuite de mémoire ne se produira? XXX

  1. Supprimer (FOO)?
  2. Itérez à travers FOO, Supprimer (FOO [Index]) et Supprimer (FOO)?
  3. 1 et 2 donne moi le même résultat?
  4. Aucun?

0 commentaires

3 Réponses :


2
votes

Vous ne pouvez pas supprimer la variable, définissez-le null foo = null;

.. Ou utilisez un objet d'espace de noms xxx


0 commentaires

0
votes

Je pense que Array.Splice peut aussi faire le tour pour vous. C'est une alternative à l'utilisation de Supprimer sur chaque index.

ref: HTTPS : //developer.mozilla.org/fr/core_javascript_1.5_reference/Objects/array/splice p>

Vous pouvez également le combiner avec Array.Foreseach comme ceci: P>

foo.forEach(function(element,ind,arr){
 arr.splice(ind,1);  //emptying the array
});
foo = null; //remove ref to empty array


3 commentaires

Il ne sert à rien de dédouaner chaque tableau, sauf si elles ne sont référencées ailleurs.


foo.length = 0; peut faire exactement la même chose.


Le fait de cette façon est O (n ^ 2) :( épissage de l'avant de la matrice est O (n) car chaque élément est réindexé. La solution que vous suggère de suggérer cela n fois la complexité (n ^ 2).



9
votes
foo = null;
should be enough for the garbage collector to get rid of the array, including all its child arrays (assuming nothing else has a reference to them). Note that it will only get rid of it when it wants to, not immediately, so don't be surprised if the browser's memory consumption doesn't drop straight away: that isn't a leak.It potentially gets more complicated if any of those array elements contain references to DOM nodes.

2 commentaires

Cela ne devient que plus compliqué dans IE6.


Pour ceux qui se rendent ici en 2014, veuillez noter qu'il n'ya presque jamais de raisons de définir quelque chose à NULL ou d'essayer de "traiter". C'est très bien en soi, merci beaucoup.