2012-01-25 7 views
1

Je fais une chose assez simple ici: obtenir des flux de nouvelles Facebook en utilisant leur API graphique. Je reçois l'objet json et je le récupère sur la page. « Fête des mères » viennent comme un tableau de JSONs (évidemment) comme ceci:Comment rechercher un paramètre particulier dans un tableau de JSON en JavaScript?

data.likes:

{ 
    "count":2, 
    "data":[ 
     {"name":"Jennifer Doe","id":"{user_id}"}, 
     {"name":"John Doe","id":"{user_id}"} 
    ] 
} 

Mon but est de savoir si l'utilisateur actuel le veuille ou non - supposer que je utilisateur en cours de user_id. Alors, quel est le moyen le plus simple de vérifier si l'utilisateur actuel est aimé ou pas?

Je sais que je peux mettre en place pour la boucle et passer par chaque donnée, mais ce n'est pas seulement inefficace, mais aussi mauvais. Je peux également utiliser $.inArray() et rechercher un objet JSON particulier, mais je veux être en mesure de rechercher par user_id seulement.

Toute aide serait appréciée. Merci!

Répondre

2

Deux solutions me viennent à l'esprit immédiatement:

-a boucle comme celui-ci

for (jsonobj in data.likes.data){ 
    //scan each jsonobj for the user 
} 

pourrait également convertir -you l'objet JSON dans une chaîne avec

JSON.stringify(jsonobj) 

puis rechercher dans l'ID de l'utilisateur avec une méthode de recherche (par exemple 'recherche': http://www.w3schools.com/jsref/jsref_search.asp ou indexOf: http://www.w3schools.com/jsref/jsref_indexof.asp).

si vous avez besoin de plus de détails, je peux élaborer sur ce point.

+0

J'aime la deuxième solution. C'est assez simple et je peux l'écrire en une ligne. Voyons voir ce que les autres vont trouver. – Sherzod

1

La manière la plus simple est de simplement faire une boucle for, vous pouvez utiliser la méthode eval javascript pour créer une méthode générique pour retourner uniquement les objets que vous recherchez.

function searchArr(arr, field, val) { 
    var output = []; 
    for (var i = 0; i < arr.length; i++) { 
    if (eval('arr[i].' + field) == val) { 
     output.push(arr[i]); 
    } 
    } 
    return output; 
} 

et peut être appelé de cette façon avec vos données var matches = searchArr(data, 'id', userId);

Cette méthode fonctionnerait avec un objet ...

+0

"Je sais que je peux configurer pour la boucle et passer en revue chaque donnée, mais ce n'est pas seulement inefficace, mais ça a l'air mauvais." Merci bien – Sherzod

+0

Ensuite, mettez la méthode dans un fichier javascript utilitaire et personne ne le verra jamais ... pourquoi le raccrochage sur la vanité? – Schreinbo

+0

oublié de mentionner que ce code sera à l'intérieur du fichier modèle. J'utilise aussi la structure MVC, donc je veux que ça soit bien organisé. et j'espère qu'il y a une manière simple de le faire de sorte que je ne devrais pas créer la fonction externe. Dans le pire des cas, je vais simplement créer des classes et des fonctions util. D'autres idées? – Sherzod

Questions connexes