Détruire un (ou plusieurs) éléments d'un tableau Array en javascript

Il y a bien la méthode splice(), mais elle necessite de connaitre l'index de l'élément à supprimer.

Je veux supprimer une valeur précise d'un tableau qui est une simple liste.


EDIT version de @Zigazou dans les commentaires qui est bien meilleure:

  1. Array.prototype.removeValue = function(obj){
  2. var oldlength=this.length;
  3.  
  4. for(i=this.length-1;i>=0;i--) {
  5. if(this[i]==obj) this.splice(i,1);
  6. }
  7.  
  8. return oldlength-this.length;
  9. }

Fin de l'édit


Et comme dernièrement j'ai découvert les "prototypes" en javascript; voici le mien que j'ai eu besoin tout à l'heure.

  1. Array.prototype.removeValue = function(obj){
  2. var tempArray = new Array();
  3. var counter=0;
  4. while (this.length>0)
  5. {
  6. var tempStr=this.shift();
  7. if(tempStr!=obj){
  8. tempArray.push(tempStr);
  9. }else{
  10. counter++;
  11. }
  12. }
  13. while(tempArray.length>0)
  14. {
  15. this.push(tempArray.pop());
  16. }
  17. return counter;
  18. }

Bon ok, je sais, le script parcourt deux fois le tableau... ça manque sûrement d'optimisation. Il est 23h30, je suis un peu crevé. N'hésitez pas à commenter si vous avez une meilleure méthode :p

Un prototype s'insère une fois au début du script javascript.

Pour le tester:

  1. <script type="text/javascript">
  2. Array.prototype.removeValue = function(obj){
  3. var tempArray = new Array();
  4. var counter=0;
  5. while (this.length>0)
  6. {
  7. var tempStr=this.shift();
  8. if(tempStr!=obj){
  9. tempArray.push(tempStr);
  10. }else{
  11. counter++;
  12. }
  13. }
  14. while(tempArray.length>0)
  15. {
  16. this.push(tempArray.pop());
  17. }
  18. return counter;
  19. }
  20.  
  21. var fruits = ["Banana", "Orange", "Apple", "Mango" ,"Lemon"];
  22. document.write("j'aime pas l'orange <br />");
  23. fruits.removeValue("Orange");
  24. document.write(fruits);
  25. </script>

Ça retournera:

j'aime pas l'orange
Banana,Apple,Mango,Lemon

Commentaires

1. Le mercredi, septembre 14 2011, 21:40 par zigazou

Hello Gnieark !

Est-ce que ça ne serait pas plus simple comme ça :

Array.prototype.removeValue = function(obj){
      var oldlength=this.length;

      for(i=this.length-1;i>=0;i--) {
            if(this[i]==obj) this.splice(i,1);
      }

      return oldlength-this.length;
}

2. Le mercredi, septembre 14 2011, 21:51 par Gnieark

Merci Ziga! Billet édité. je sens qu'un jour je vais te réer des identifiants sur le blog du grouik ;)

Page top