Comment puis-je trouver l'indice d'un objet à l'intérieur d'un Tableau à l'aide de underscore.js?
Je veux obtenir l'index de la valeur donnée à l'intérieur d'un Tableau à l'aide de underscore.js.
Ici est mon cas
var array = [{'id': 1, 'name': 'xxx'},
{'id': 2, 'name': 'yyy'},
{'id': 3, 'name': 'zzz'}];
var searchValue = {'id': 1, 'name': 'xxx'};
J'ai utilisé le code suivant,
var index = _.indexOf(array, function(data) {
alert(data.toSource()); //For testing purpose
return data === searchValue;
});
Aussi essayé ce trop
var index = _.indexOf(array, {id: searchValue.id});
Mais il returns -1
. Car il n'entre pas dans cette fonction. Donc, je n'ai pas reçu ce message d'alerte.
Quoi de mal avec mon code.
Quelqu'un peut-il m'aider?
OriginalL'auteur prince | 2014-02-03
Vous devez vous connecter pour publier un commentaire.
Utiliser ce lieu:
Dans votre extrait de
data === searchValue
compare les objets de références, vous ne voulez pas le faire. D'autre part, si vous utilisezdata == searchValue
vous allez comparer les objets de la chaîne des représentations c'est à dire[Object object]
si vous n'avez pas redéfinitoString
méthodes.Donc la bonne façon de comparer les objets est l'utilisation d'
_.isEqual
.Vous pouvez examiner comment
isEqual
est utilisé. 🙂OriginalL'auteur Minko Gechev
J'avais suggérons fortement de prendre un coup d'oeil à lodash. Il contient assez peu de chouettes petites fonctions qui, malheureusement, le trait de soulignement est absente.
Par exemple, c'est ce que vous feriez avec lodash:
http://lodash.com/docs#findIndex
Aussi, si vous êtes lié à l'utilisation de Soulignement - vous pouvez saisir lodash du trait de soulignement construire à https://raw.github.com/lodash/lodash/2.4.1/dist/lodash.underscore.js
ES2015
Avec ES2015 maintenant dans une large utilisation (par transpilers comme Babel), vous pourriez renoncer à lodash et le trait de soulignement pour la tâche à portée de main et l'utilisation des méthodes indigènes:
OriginalL'auteur Kasper Lewau
Peut être ma suggestion va vous donner des conseils.
Pourquoi utilisez-vous la fonction de rappel pour méthode indexof? La signature de indexof dans underscore.js est la suivante:
trouver qui pourrait être meilleur pour cette tâche:
OriginalL'auteur Iaroslav Karandashev
Avec des objets,
===
et==
vérifier pour voir si les deux références se rapportent à la même objet; elle ne vérifie pas pour équivalent objets:Vous avez à tester les propriétés de l'objet à prendre la décision. Dans votre cas, le
id
propriété semble une bonne option, ou si vous voulez comparer toutes les propriétés, vous pouvez utiliser le trait de Soulignement estisEqual
.OriginalL'auteur T.J. Crowder
Trait de soulignement utilise natif méthode indexOf si disponible,d'autre secours. Ainsi, pour une liste d'objets que vous avez à mettre en œuvre d'une autre façon.
Un exemple pourrait être
ou
OriginalL'auteur n_n
OriginalL'auteur riyas tk
Dans le cas où vous avez des objets compliqués, et souhaitez rechercher un objet dans la collection la recherche d'un bien immobilier, il suffit d'aller avec:
Où "arrayObj" est la collection avec des objets, "id" est la prop, et le "1" représente la valeur qui est à la recherche.
OriginalL'auteur Nicolae Lozovan