En soulignant, je peux trouver avec succès un élément avec une valeur de clé spécifique
var tv = [{id:1},{id:2}]
var voteID = 2;
var data = _.find(tv, function(voteItem){ return voteItem.id == voteID; });
//data = { id: 2 }
mais comment puis-je trouver à quel index de tableau cet objet s'est produit?
javascript
underscore.js
mheavers
la source
la source
findIndex
:var dataIndex = _.findIndex(tv, { id: voteID })
Réponses:
Je ne sais pas s'il existe une méthode de soulignement existante qui fait cela, mais vous pouvez obtenir le même résultat avec du javascript brut.
Ensuite, vous pouvez simplement faire:
var data = tv[tv.getIndexBy("id", 2)]
la source
return -1;
par défaut?findIndex
a été ajouté en 1.8:Voir: http://underscorejs.org/#findIndex
Sinon, cela fonctionne également, si cela ne vous dérange pas de créer une autre liste temporaire:
Voir: http://underscorejs.org/#pluck
la source
index = _.findIndex(tv, {id: voteID})
, fonctionne également si latv
collection a des valeurs plus compliquées (plus qu'une simpleid
propriété)Si vous souhaitez conserver le trait de soulignement pour que votre fonction de prédicat soit plus flexible, voici 2 idées.
Méthode 1
Étant donné que le prédicat pour
_.find
reçoit à la fois la valeur et l'index d'un élément, vous pouvez utiliser un effet secondaire pour récupérer l'index, comme ceci:Méthode 2
En regardant la source de soulignement, voici comment
_.find
est implémenté:Pour en faire une
findIndex
fonction, remplacez simplement la ligneresult = value;
parresult = index;
Ceci est la même idée que la première méthode. Je l'ai inclus pour souligner que le soulignement utilise également un effet secondaire pour implémenter_.find
.la source
Lo-Dash , qui étend Underscore, a la méthode findIndex , qui peut trouver l'index d'une instance donnée, ou par un prédicat donné, ou selon les propriétés d'un objet donné.
Dans votre cas, je ferais:
Essaie.
la source
Si votre environnement cible prend en charge ES2015 (ou si vous avez une étape transpile, par exemple avec Babel), vous pouvez utiliser le natif Array.prototype.findIndex ().
Compte tenu de votre exemple
la source
vous pouvez utiliser la
indexOf
méthode delodash
la source
Gardez les choses simples:
Ou, pour les non-haters, la variante CoffeeScript:
la source
return parseInt(i) for i, x of array when cond(x)
C'est pour aider les
lodash
utilisateurs. vérifiez si votre clé est présente en faisant:la source
La solution la plus simple est d'utiliser le lodash:
const _ = require ('lodash');
la source
Si vous attendez plusieurs correspondances et que vous avez donc besoin d'un tableau à renvoyer, essayez:
Si la valeur de la propriété est unique et que vous avez besoin de l'index de la correspondance, essayez:
la source
la source
J'ai eu un cas similaire mais au contraire, c'est de trouver la clé utilisée en fonction de l'index d'un objet donné. Je pourrais trouver une solution dans le trait de soulignement en utilisant
Object.values
pour renvoyer l'objet dans un tableau pour obtenir l'index produit.la source