Javascript - supprimer un élément de tableau par valeur [dupliquer]

cette question a déjà une réponse ici:

Ma situation:

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

je voudrais delete where id_tag = 90 et retourner:

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

Comment faire?

121
demandé sur sbaaaang 2011-08-22 07:27:27

10 réponses

vous voulez utiliser JavaScript tableau 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 ce raccourci cool ~ tilde, voir ce post:

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


Note: IE < 9 ne supporte pas .indexOf() sur les tableaux. Si vous voulez vous assurer que votre code fonctionne dans IE, vous devez utiliser le $.inArray() de jQuery:

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 déjà jQuery sur la page, il n'y a pas besoin de l'utiliser juste pour $.inArray . Vous pouvez utiliser ce polyfill à la place.

217
répondu Joseph Silber 2017-05-23 12:17:08

si vous allez l'utiliser souvent (et sur plusieurs tableaux), étendre l'objet Array 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)
17
répondu Pete 2011-08-22 03:51:05
tag_story.splice(tag_story.indexOf(id_tag), 1);
10
répondu Eli Grey 2011-08-22 03:29:50

comme variante

delete array[array.indexOf(item)];

si vous ne savez rien de l'opérateur delete , N'utilisez pas ce .

4
répondu disfated 2013-10-16 16:13:35

voici quelques fonctions d'aide que j'utilise:

Array.contains = function (arr, key) {
    for (var i = arr.length; i--;) {
        if (arr[i] === key) return true;
    }
    return false;
};

Array.add = function (arr, key, value) {
    for (var i = arr.length; i--;) {
        if (arr[i] === key) return arr[key] = value;
    }
    this.push(key);
};

Array.remove = function (arr, key) {
    for (var i = arr.length; i--;) {
        if (arr[i] === key) return arr.splice(i, 1);
    }
};
3
répondu yckart 2013-10-27 09:52:13
function removeValue(arr, value) {
    for(var i = 0; i < arr.length; i++) {
        if(arr[i] === value) {
            arr.splice(i, 1);
            break;
        }
    }
    return arr;
}

on peut l'appeler ainsi:

removeValue(tag_story, 90);
3
répondu Peter Olson 2014-11-19 22:08:24

utilisez .indexOf() et .splice() . Quelque chose comme:

tag_story.splice(tag_story.indexOf(90),1);
2
répondu James Holmes 2013-02-26 22:17:35

j'aime utiliser un filtre:

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

// delete where id_tag = 90
id_tag = id_tag.filter(function(x) {
    if (x !== 90) {
      return x;
    }
});
2
répondu Aleck Landgraf 2014-07-29 01:15:19

vous pouvez utiliser lodash.js

_.pull (arrayName,valueToBeRemove);

dans votre cas :- _.pull (id_tag, 90);

1
répondu Gourav Sahare 2016-05-02 12:32:01
var id_tag = [1,2,3,78,5,6,7,8,47,34,90]; 
var delete_where_id_tag = 90
    id_tag =id_tag.filter((x)=> x!=delete_where_id_tag); 
0
répondu Siddhartha 2017-11-29 14:20:52