Dis que j'ai ce code
var arr = [{id: 1, nom: 'a'}, {id: 2, nom: 'b'}, {id: 3, nom: 'c'}];
et je veux supprimer l'élément avec id = 3 du tableau. Y a-t-il un moyen de faire cela sans épisser? Peut-être quelque chose en utilisant un trait de soulignement ou quelque chose comme ça?
Merci!
javascript
underscore.js
climboïde
la source
la source
Réponses:
En utilisant simplement JavaScript, cela a déjà été répondu: supprimer les objets du tableau par propriété d'objet .
En utilisant underscore.js, vous pouvez combiner
.findWhere
avec.without
:Cependant, puisque vous créez de toute façon un nouveau tableau dans ce cas, vous pouvez simplement utiliser
_.filter
ou laArray.prototype.filter
fonction native (comme indiqué dans l'autre question). Ensuite, vous n'effectueriez une itération sur le tableau qu'une fois au lieu de potentiellement deux fois comme ici.Si vous souhaitez modifier le tableau sur place , vous devez utiliser
.splice
. Ceci est également montré dans l'autre question et le undescore ne semble pas fournir de fonction utile pour cela.la source
_.reject
ressemble à une meilleure sélection ici.arr.pop()
...Vous pouvez utiliser Underscore
.filter
Peut aussi s'écrire:
Vérifier Fiddle
Vous pouvez aussi utiliser
.reject
la source
_()
créera un wrapper autour de la collection qui vous permettra d'invoquer des méthodes de soulignement.Utilisez le soulignement
_.reject()
:la source
arr = _.reject(arr, d => d.id === 3 );
Underscore a une méthode _without () parfaite pour supprimer un élément d'un tableau, surtout si vous avez l'objet à supprimer.
Fonctionne également avec des objets plus complexes.
Si vous n'avez pas l'élément à supprimer, juste une propriété de celui-ci, vous pouvez utiliser
_.findWhere
et ensuite_.without
.la source
{ Name: "Sam", Age: 19 }
à sans, plutôt qu'à la variable sam, cela ne fonctionne plus. FiddleVeuillez faire preuve de prudence si vous filtrez des chaînes et recherchez des filtres insensibles à la casse. _.without () est sensible à la casse. Vous pouvez également utiliser _.reject () comme indiqué ci-dessous.
la source
D'autres réponses créent une nouvelle copie du tableau, si vous souhaitez modifier le tableau en place, vous pouvez utiliser:
Mais cela suppose que l'élément sera toujours trouvé à l'intérieur du tableau (car s'il n'est pas trouvé, il supprimera toujours le dernier élément). Pour être sûr, vous pouvez utiliser:
la source
ou d'une autre manière pratique:
mes 2 cents
la source
object
et renvoie un fichierobject
. donc pas très bon pour travailler avecArrays
où nous pourrions nous attendre à obtenir unarray
retour après la suppression d'un élément._.without([1, 2, 1, 0, 3, 1, 4], 0, 1); => [2, 3, 4]
L'utilisation peut utiliser la méthode de JavaScript
Array#filter
simple comme ceci:Ou, utilisez
Array#reduce
et desArray#concat
méthodes comme celle-ci:REMARQUE:
la source
J'avais l'habitude d'essayer cette méthode
Il pourrait y avoir de meilleures méthodes comme les solutions ci-dessus fournies par les utilisateurs
la source
En utilisant underscore.js
Le résultat sera:
[{id:1name:'a'},{id:2,name:'c'}]
la source
Vous pouvez utiliser la méthode de rejet de Underscore, ci-dessous retournera un nouveau tableau qui n'aura pas de tableau avec une correspondance particulière
la source