57 votes

La meilleure façon de supprimer un élément de tableau par valeur

J'ai un tableau comme ceci

arr = ["orange","red","black","white"]

Je veux augmenter l'objet tableau en définissant un deleteElem() qui se comporte comme suit :

arr2 = arr.deleteElem("red"); // ["orange","black","white"] (with no hole)

Quelle est la meilleure façon d'accomplir cette tâche en utilisant uniquement le paramètre valeur (sans index) ?

106voto

Maurício Linhares Points 19468

Voici comment procéder :

var arr = ["orange","red","black","white"];
var index = arr.indexOf("red");
if (index >= 0) {
  arr.splice( index, 1 );
}

Ce code supprimera une occurrence de "rouge" dans votre tableau.

55voto

Romain Vincent Points 819

Quand j'étais novice en codage, je pouvais à peine dire ce que splice faisait, et même aujourd'hui, il semble moins lisible.

Mais la lisibilité compte.

Je préfère utiliser la méthode du filtre comme ceci :

arr = ["orange","red","black","white","red"]

arr = arr.filter(val => val !== "red");

console.log(arr) // ["orange","black","white"]

Notez comment toutes les occurrences de "rouge" sont supprimées du tableau.

À partir de là, vous pouvez facilement travailler avec des données plus complexes telles que des tableaux d'objets.

arr = arr.filter(obj => obj.prop !== "red");

4voto

Ajeesh Joshy Points 737

Il existe une méthode de soulignement pour cela, http://underscorejs.org/#without

arr = ["orange","red","black","white"];

arr = _.without(arr, "red");

1voto

Horst Walter Points 4075

Mon approche, voyons ce que les autres ont à dire. Il supporte également une méthode "equals".

 // Remove array value
 // @param {Object} val
 Array.prototype.removeByValue = function (val) {
    for (var i = 0; i < this.length; i++) {
       var c = this[i];
       if (c == val || (val.equals && val.equals(c))) {
          this.splice(i, 1);
          break;
       }
    }
 };

Lire https://stackoverflow.com/a/3010848/356726 pour l'impact sur les itérations lors de l'utilisation du prototype avec Array.

1voto

Jiri Points 5589
Array.prototype.deleteElem = function(val) {
    var index = this.indexOf(val); 
    if (index >= 0) this.splice(index, 1);
    return this;
}; 
var arr = ["orange","red","black","white"];
var arr2 = arr.deleteElem("red");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X