J'ai testé Array.prototype.splice() et trouvé que c'est très lent sur les grands tableaux.
Une manière beaucoup plus rapide de supprimer des éléments consiste à copier ceux que vous souhaitez conserver dans un nouveau tableau, tout en ignorant ceux que vous voulez supprimer. Une fois la copie terminée, vous remplacez simplement l'ancien tableau par le nouveau.
Dans mon test, j'ai supprimé tous les autres éléments d'un tableau contenant 100 000 éléments. Le test a comparé Array.prototype.splice() à d'autres méthodes. Voici les résultats:
855 ms = splice
7 ms = manual copying without preserving the original array
14 ms = manual copying with preserving the original array
Voici le code pour la dernière méthode:
var arrB = [],
i=varA.length,
j=0;
// copy even items to a new array
while(i > 0) {
i-=2; // skip two elements
arrB[j++] = arrA[i];
}
// clear the old array
arrA.splice(0, arrA.length);
// copy values back to the old array
// array is preserved (references to the array don't need to be updated)
arrA.push.apply(arrA, arrB);
Le test en action se trouve sur jsFiddle: http://jsfiddle.net/sansegot/eXvgb/3/
Les résultats sont bien différents si vous ne besoin de supprimer quelques éléments - dans ce cas Array.prototype.splice() est plus rapide (bien que la différence ne soit pas si grande)! Seulement si vous devez appeler splice() plusieurs fois cela vaut la peine d'implémenter un algorithme personnalisé. Le deuxième test, dans lequel un nombre limité d'éléments doivent être supprimés peut être trouvé ici: http://jsfiddle.net/sansegot/ZeEFJ/1/
splice() est en effet le chemin à parcourir, mais gardez à l'esprit que la suppression de choses au milieu sera lente avec de grands tableaux puisque flash va "remonter" les entrées suivantes pour combler le vide. – grapefrukt
Gardez également à l'esprit que le fait de supprimer des éléments au milieu d'un tableau tout en l'exécutant causera des ravages à moins que vous ne couriez en arrière. – Sean
Notez que cela fonctionnera aussi pour JavaScript. – Grinn