J'ai essayé plusieurs approches pour trouver un objet dans un tableau, où ID = var, et s'il est trouvé, supprimer l'objet du tableau et renvoyer le nouveau tableau d'objets.
Les données:
[
{"id":"88","name":"Lets go testing"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
Je suis capable de rechercher le tableau en utilisant jQuery $ grep;
var id = 88;
var result = $.grep(data, function(e){
return e.id == id;
});
Mais comment puis-je supprimer l'objet entier lorsque id == 88 et renvoyer des données comme ceci:
Les données:
[
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
slice
fonction et d'une petitefor
boucle?Réponses:
Filtrez simplement par le prédicat opposé:
la source
slice
ne supprime rien non plus. Je ne sais pas à quoi vous voulez en venir. Si vous avez vous-même un problème spécifique, vous voudrez peut-être poser une nouvelle question .data.filter(e => !ids.includes(e.id))
voici une solution si vous n'utilisez pas jquery:
la source
findIndex()
et ensuitesplice(index, 1)
sur le tableau parent?arr = arr.filter( obj => obj.id !== id);
Vous pouvez simplifier cela, et il n'est vraiment pas nécessaire d'utiliser jquery ici.
Parcourez simplement la liste, trouvez l'identifiant correspondant, l'épissure, puis interrompez pour quitter votre boucle
la source
i=data.length; i > 0; i--
faites une boucle en ordre inverse avec et ne l'utilisez pasbreak
.i = data.length
va casser toutdata[i]
, ça devrait être quelque chose commei=data.length -1 ; i > -1; i--
Il existe une nouvelle méthode pour le faire dans ES6 / 2015 en utilisant findIndex et l'opérateur de répartition de tableau:
Vous pouvez le transformer en une fonction pour une réutilisation ultérieure comme ceci:
De cette façon, vous pouvez supprimer des éléments par différentes clés en utilisant une méthode (et s'il n'y a pas d'objet qui répond aux critères, vous obtenez le tableau d'origine renvoyé):
Ou vous pouvez le mettre sur votre Array.prototype:
Et utilisez-le de cette façon:
la source
En supposant que les identifiants sont uniques et que vous n'aurez qu'à supprimer un élément, cela
splice
devrait faire l'affaire:la source
each(data,function(idx,ele)
. Je vous facturerai plus tard pour les 30 minutes que j'aiSi vous utilisez jQuery, utilisez jQuery.grep comme ceci:
Utilisation de ES5 Array.prototype.filter :
la source
jQuery
carte comme filtre.Peut-être recherchez-vous une
$.grep()
fonction:la source
sift
est un filtre de collecte puissant pour des opérations comme celle-ci et bien plus avancées. Il fonctionne côté client dans le navigateur ou côté serveur dans node.js.Il prend en charge les filtres tels que
$in
,$nin
,$exists
,$gte
,$gt
,$lte
,$lt
,$eq
,$ne
,$mod
,$all
,$and
,$or
,$nor
,$not
,$size
,$type
, et$regex
, et cherche à être compatible avec l' API avec le filtrage de collecte MongoDB.la source
Cela devrait faire l'affaire, jsfiddle
la source
Assurez-vous de forcer l'ID de l'objet à un entier si vous testez l'égalité stricte:
Démo
la source
Si vous utilisez des traits de soulignement js, il est facile de supprimer un objet en fonction de la clé. http://underscorejs.org . Exemple:
la source