J'ai un tableau d'objets:
Object = {
1 : { name : bob , dinner : pizza },
2 : { name : john , dinner : sushi },
3 : { name : larry, dinner : hummus }
}
Je veux pouvoir rechercher dans l'objet / tableau où la clé est «dîner», et voir si cela correspond à «sushi».
Je sais que jQuery a $ .inArray, mais il ne semble pas fonctionner sur des tableaux d'objets. Ou peut-être que je me trompe. indexOf semble également ne fonctionner que sur un seul niveau de tableau.
N'y a-t-il pas de fonction ou de code existant pour cela?
javascript
jquery
arrays
search
Questionneur
la source
la source
Object
c'est réservé en Javascript,Object
est l'objet objet, c'est à dire la mère de tous les objets.Réponses:
Si vous avez un tableau tel que
Vous pouvez utiliser la
filter
méthode d'un objet Array:Dans les nouvelles implémentations JavaScript, vous pouvez utiliser une expression de fonction:
Vous pouvez rechercher des personnes qui
"dinner": "sushi"
utilisent unmap
ou un
reduce
Je suis sûr que vous êtes en mesure de généraliser cela à des clés et des valeurs arbitraires!
la source
grep
méthode de jQuery . Cela peut avoir du sens de passer à votre réponse car c'est le même concept que ce que vous faites, mais dépendant de jQuery et convivial pour les navigateurs de merde.jQuery a une méthode intégrée
jQuery.grep
qui fonctionne de manière similaire à lafilter
fonction ES5 de la réponse de @ adamse et devrait fonctionner correctement sur les navigateurs plus anciens.En utilisant l'exemple d'Adamse:
vous pouvez faire ce qui suit
la source
jsFiddle .
Tant que ce
-1
n'est jamais une clé valide.la source
Si vous allez effectuer cette recherche fréquemment, pensez à changer le format de votre objet afin que le dîner soit réellement une clé. C'est un peu comme l'attribution d'une clé de cluster primaire dans une table de base de données. Ainsi, par exemple:
Vous pouvez maintenant y accéder facilement comme ceci:
Object['sushi']['name']
Ou si l'objet est vraiment aussi simple (juste 'nom' dans l'objet), vous pouvez simplement le changer en:
Et accéder ensuite comme:
Object['sushi']
.Il n'est évidemment pas toujours possible ou à votre avantage de restructurer votre objet de données comme celui-ci, mais le fait est que la meilleure réponse est parfois de déterminer si votre objet de données est structuré de la meilleure façon. Créer une clé comme celle-ci peut être plus rapide et créer un code plus propre.
la source
Vous pouvez trouver l'objet dans un tableau avec la bibliothèque Alasql :
Essayez cet exemple dans jsFiddle .
la source
Vous pouvez utiliser une simple boucle for in:
L'exemple de violon suivant place tous les objets qui contiennent
dinner:sushi
dans un tableau:https://jsfiddle.net/3asvkLn6/1/
la source
Il y a déjà beaucoup de bonnes réponses ici alors pourquoi pas une de plus, utilisez une bibliothèque comme lodash ou underscore :)
la source
J'ai dû rechercher une structure de plan de site imbriquée pour le premier élément feuille qui trace un chemin donné. Je suis venu avec le code suivant en utilisant simplement
.map()
.filter()
et.reduce
. Renvoie le dernier élément trouvé qui correspond au chemin/c
.la source
J'essaierais de ne pas réinventer la roue. Nous utilisons l' analyse d' objets pour tous nos besoins en matière de traitement de données. C'est conceptuellement très simple, mais permet beaucoup de choses intéressantes. Voici comment vous résoudriez votre question spécifique
Définition des données
Logique
Production
la source
Si vous voulez trouver un objet spécifique via la fonction de recherche, essayez simplement quelque chose comme ceci:
Ceci est un exemple d'objet:
Le code va itérer et trouver le tableau "user" et cherchera l'objet que vous recherchez à l'intérieur.
Mon problème était lorsque l'index du tableau a changé chaque actualisation de la fenêtre et qu'il était dans le troisième ou le deuxième tableau, mais cela n'a pas d'importance.
A fonctionné à merveille pour moi!
Dans votre exemple, c'est un peu plus court:
la source