12
votes

Supprimer un élément d'un tableau par la valeur

J'ai un éventail d'articles comme: xxx

et j'essaie de supprimer tous les éléments correspondant à l'identifiant donné. Dans ce cas; animal

je suis coincé! Je peux le faire fonctionner facilement en ayant un tableau plus simple, mais ce n'est pas ce dont j'ai besoin ... J'ai également besoin de supprimer l'article par valeur car je ne veux pas que le problème de faire référence à des éléments par leur indice.

Y a-t-il une méthode JQuery que je pourrais utiliser où je n'ai pas besoin de itération via le tableau d'éléments, spécifiez plutôt un sélecteur?

Voici mon jsfiddle: Htp://jsfiddle.net/zafrx/


4 commentaires

Votre syntaxe est invalide. Avez-vous un tableau ou un objet? Vous avez mélangé la syntaxe.


Si vous regardez dans la console JavaScript (Firebug, dans mon cas), il a soulevé cette erreur, «non capturé SyntaxError: Jeton inattendu:« Vous devez créer un objet d'objet et vous pourrez accéder facilement aux attributs de l'article.


Objet var items = {id: "animal", type: "cat", mignon: "oui"} , tableau var items = ["animal", "oui", "oui" ]


Ma faute! Je vais l'enlever


9 Réponses :


26
votes

Je ne sais pas combien de problème il est de faire référence à des éléments de réseau par index. Le moyen standard d'éliminer les éléments de réseau est avec le méthode d'épissure xxx pré>

et bien sûr, vous pouvez généraliser cela dans une fonction d'assistance afin de ne pas avoir à dupliquer cela partout. p>


edit strud> p>

Je viens de remarquer cette syntaxe incorrecte: p>

for (var i = 0; i < items.length; i++)
    if (items[i].id && items[i].id === "animal") { 
        items.splice(i, 1);
        break;
    }


1 commentaires

articles.splicite (articles.indexof ("animaux"), 1)



6
votes

Vous pouvez utiliser épissure ou faire fonctionner vous-même. Voici un exemple: xxx


0 commentaires

3
votes

Vous devriez le faire comme ceci (assurez-vous de disposer de la syntaxe droite ... Vous ne pouvez pas avoir une matrice avec des propriétés, mais votre objet intérieur {} code>, puis vous pouvez itérer par les touches et supprimer non désiré. Touche):

var items = {id: "animal", type: "cat", cute: "yes"}
var removeItem = "animal"; // or with the ID matching animal...

for(var p in items){
    if(items[p] === removeItem)
        delete items[p]
}


1 commentaires

Je pense que cela pourrait être la bonne réponse. J'ai manqué la syntaxe incorrecte d'Op.



2
votes


11
votes

Pas besoin de jQuery ou de tiers tiers liber pour cela, nous pouvons maintenant utiliser le nouveau filtre ES5:

let myArray = [{ id : 'a1', name : 'Rabbit'}, { id : 'a2', name : 'Cat'}];
myArray = myArray.filter(i => i.id !== 'a1');


0 commentaires

5
votes

Il y a un moyen simple!

// define function
function delete_by_id(id) {

  var myItems = [{
    id: 1,
    type: "cat",
    cute: "yes"
  }, {
    id: 2,
    type: "rat",
    cute: "yes"
  }, {
    id: 3,
    type: "mouse",
    cute: "yes"
  }];

  // before
  console.log(myItems);

  myItems.splice(myItems.indexOf(myItems.find(item => item.id == id)), 1);

  // after 
  console.log(myItems);

}

// call function
delete_by_id(1);


0 commentaires

0
votes
function removeFromArr(parray, pstring, ptag) {
        var farr = [];
        var count = 0;
        for (var i = 0; i < pa.length; i++) {
            if (pstring != pa[i][ptag]) {
                farr[count] = pa[i];
                count++;
            }
        }
        return farr;
    }

1 commentaires

Veuillez inclure une explication de la manière et de la raison pour laquelle cela résout le problème contribuerait vraiment à améliorer la qualité de votre message.



0
votes

solution ES6 xxx


0 commentaires