138 votes

Supprimer un élément de tableau par valeur en JavaScript

Ma situation:

var id_tag = [1,2,3,78,5,6,7,8,47,34,90];

Maintenant, je voudrais être en mesure de supprimer un élément de ce tableau en id_tag.

Par exemple, je voudrais delete where id_tag = 90 et retour

var id_tag = [1,2,3,78,5,6,7,8,47,34];

Comment puis-je le faire?

227voto

Joseph Silber Points 69582

Vous aurez envie d'utiliser du JavaScript Array splice méthode:

var tag_story = [1,3,56,6,8,90],
    id_tag = 90,
    position = tag_story.indexOf(id_tag);

if ( ~position ) tag_story.splice(position, 1);

P. S. Pour une explication de frais ~ tilde raccourci, voir ce post:

À l'aide d'un ~ tilde avec indexOf pour vérifier l'existence d'un élément dans un tableau.


Remarque: IE < 9 ne prend pas en charge .indexOf() sur les tableaux. Si vous voulez vous assurer que votre code fonctionne sous IE, vous devez utiliser du jQuery $.inArray():

var tag_story = [1,3,56,6,8,90],
    id_tag = 90,
    position = $.inArray(id_tag, tag_story);

if ( ~position ) tag_story.splice(position, 1);

Si vous voulez soutenir IE < 9 mais n'avez pas encore de jQuery sur la page, il n'y a pas besoin de l'utiliser juste pour $.inArray. Vous pouvez utiliser cette polyfill de la place.

19voto

Pete Points 355

Si vous allez être en utilisant cette souvent (et sur plusieurs tableaux), étendre l'objet de Tableau pour créer une fonction unset.

Array.prototype.unset = function(value) {
    if(this.indexOf(value) != -1) { // Make sure the value exists
        this.splice(this.indexOf(value), 1);
    }   
}

tag_story.unset(56)

14voto

Eli Grey Points 17553
tag_story.splice(tag_story.indexOf(id_tag), 1);

4voto

Peter Olson Points 30452
function removeValue(arr, value) {
    for(var i = 0; i < arr.length; i++) {
        if(arr[1] === value) {
            return arr.splice(i, 1);
        }
    }
}

Cela peut être appelé de la sorte:

tag_story = removeValue(tag_story, 90);

4voto

disfated Points 2604

Comme une variante

delete array[array.indexOf(item)];

Si vous ne savez rien à propos de delete de l'opérateur, de NE PAS l'utiliser.

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