J'ai un fichier JSON contenant des données auxquelles je souhaite accéder sur mon site Web AngularJS. Maintenant, ce que je veux, c'est obtenir un seul objet du tableau. Je voudrais donc par exemple Item avec id 1.
Les données ressemblent à ceci:
{ "results": [
{
"id": 1,
"name": "Test"
},
{
"id": 2,
"name": "Beispiel"
},
{
"id": 3,
"name": "Sample"
}
] }
J'aimerais charger les données avec la fonctionnalité AngularJS $ http comme celle-ci:
$http.get("data/SampleData.json");
qui fonctionne. Mais comment puis-je maintenant obtenir un objet de données spécifique (par identifiant) à partir du tableau d'où je viens $http.get
?
Merci d'avance pour votre aide.
Salue Marc
Réponses:
La seule façon de procéder est d'itérer sur le tableau. Évidemment, si vous êtes sûr que les résultats sont classés par identifiant, vous pouvez faire une recherche binaire
la source
Utilisation de la solution ES6
Pour ceux qui lisent encore cette réponse, si vous utilisez ES6, la
find
méthode a été ajoutée dans les tableaux. Donc, en supposant la même collection, la solution serait:Je choisirais totalement cette solution maintenant, car elle est moins liée à angulaire ou à tout autre cadre. Javascript pur.
Solution angulaire (ancienne solution)
J'ai cherché à résoudre ce problème en procédant comme suit:
Un exemple de cas d'utilisation:
Plunker: http://plnkr.co/edit/5E7FYqNNqDuqFBlyDqRh?p=preview
la source
Pour tous ceux qui consultent cet ancien article, c'est le moyen le plus simple de le faire actuellement. Il ne nécessite qu'un AngularJS
$filter
. C'est comme la réponse de Willemoes, mais plus courte et plus facile à comprendre.la source
[0]
ferait renvoyer le premier résultat qu'il trouve dans la collection, donc cela ne fonctionnerait que si votre collection est triée et que l'objet que vous recherchez est le premier qu'il trouve lors de son itération. Par exemple. s'il y a un identifiant: 12 qui précède id: 2, il renverrait id: 12.Personnellement, j'utilise un soulignement pour ce genre de choses ... donc
alors "a" serait la ligne que vous vouliez de votre tableau où l'id était égal à 2
la source
find
peut potentiellement renvoyer plusieurs objets. Puisque nous n'en voulons qu'une, nous pouvons utiliserfindWhere
qui ne renvoie que la première occurrence (dont nous savons que c'est la seule occurrence), par exemplea = _.findWhere(results, {id: 2})
.Je veux juste ajouter quelque chose à la réponse de Willemoes . Le même code écrit directement dans le HTML ressemblera à ceci:
En supposant que "results" est une variable de votre FooController et que vous souhaitez afficher la propriété "name" de l'élément filtré.
la source
Vous ne pouvez utiliser
ng-repeat
et sélectionner des données que si les données correspondent à ce que vous recherchez en utilisantng-show
par exemple:la source
Vous pouvez simplement faire une boucle sur votre tableau:
Si vous ne voulez pas écrire ces boucles désordonnées, vous pouvez envisager d'utiliser underscore.js ou Lo-Dash (exemple dans ce dernier):
la source
Si vous voulez la liste d'éléments comme la ville sur la base de l'identifiant de l'état, utilisez
la source
Malheureusement (sauf erreur de ma part), je pense que vous devez parcourir l'objet de résultats.
Au moins de cette façon, il sortira de l'itération dès qu'il trouvera l'ID correspondant correct.
la source
Pourquoi compliquer la situation? c'est simple écrire une fonction comme celle-ci:
Cas d'utilisation:
production:
la source
sortie: Azərbaycan
la source
Si vous le pouvez, concevez votre structure de données JSON en utilisant les index de tableau comme ID. Vous pouvez même "normaliser" vos tableaux JSON tant que vous n'avez aucun problème à utiliser les index de tableau comme "clé primaire" et "clé étrangère", quelque chose comme SGBDR. En tant que tel, à l'avenir, vous pouvez même faire quelque chose comme ceci:
C'est la solution "By Design" . Pour votre cas, simplement:
Bien sûr, si le format de votre ID est quelque chose comme "XX-0001" dont son index de tableau est 0 , alors vous pouvez soit faire une manipulation de chaîne pour mapper l'ID; ou bien rien ne peut être fait à ce sujet sauf par l'approche itérative.
la source
Je sais que je suis trop tard pour répondre, mais il est toujours préférable de me présenter plutôt que de ne pas se présenter du tout :). ES6 façon de l'obtenir:
la source
Le moyen simple d'obtenir (un) élément du tableau par id:
La méthode find () renvoie la valeur du premier élément du tableau qui satisfait la fonction de test fournie. Sinon, undefined est renvoyé.
vous n'avez pas besoin d'utiliser filter () et d'attraper le premier élément xx.filter () [0] comme dans les commentaires ci-dessus
Idem pour les objets en tableau
Bien sûr, si vous avez plusieurs identifiants, utilisez la méthode filter () pour obtenir tous les objets. À votre santé
la source
Je ne sais pas si c'est vraiment bon, mais cela m'a été utile. J'avais besoin d'utiliser $ scope pour le faire fonctionner correctement.
la source
utilisez $ timeout et exécutez une fonction pour rechercher dans le tableau "results"
la source
Je voudrais parcourir le tableau des résultats en utilisant un filtre angularjs comme celui-ci:
var foundResultObject = getObjectFromResultsList (résultats, 1);
la source