2013-06-05 3 views
0

Mon JSON est ci-dessous. Il contient deux objets, chacun avec quelques paires de valeurs clés. Comment puis-je effectuer une recherche dans tout le tableau JSON et tirer l'objet qui contient une chaîne particulière en tant que valeur?Rechercher un tableau JSON pour une chaîne et récupérer un objet qui le contient en tant que valeur

Dans ce cas, j'ai besoin de tirer l'objet avec le coupon_code: COUPON1, de sorte que je puisse alors tirer l'ID de ce coupon.

En bref, j'ai juste besoin d'obtenir l'identifiant du coupon avec coupon_code: COUPON1

[Object, Object] 

    0: Object 
    coupon_code: "COUPON1" 
    created_at: "2013-06-04T13:50:20Z" 
    deal_program_id: 1 
    id: 7 
    updated_at: "2013-06-04T13:50:20Z" 
    __proto__: Object 

    1: Object 
    coupon_code: "COUPON3" 
    created_at: "2013-06-04T15:47:14Z" 
    deal_program_id: 1 
    id: 8 
    updated_at: "2013-06-04T15:47:14Z" 

Merci :)

+0

Je pense que pour la boucle fera: http://stackoverflow.com/questions/9329446/for-each -dans un tableau-comment-faire-cela-en-javascript? lq = 1 –

+3

Au moment où vous le cherchez, ce n'est plus JSON. C'est juste un tableau. –

Répondre

9

Vous venez de boucle dans le tableau et regarder. Il y a lots of ways to do that in JavaScript.

Par exemple:

var a = /*...your array...*/; 
var index = 0; 
var found; 
var entry; 
for (index = 0; index < a.length; ++index) { 
    entry = a[index]; 
    if (entry.coupon_code == "COUPON1") { 
     found = entry; 
     break; 
    } 
} 

ou en utilisant la méthode Array#some de ES5 (qui est celui qui peut être "calée" pour les navigateurs qui ne l'ont pas encore, la recherche de "ES5 shim"):

var a = /*...your array...*/; 
var found; 
a.some(function(entry) { 
    if (entry.coupon_code == "COUPON1") { 
     found = entry; 
     return true; 
    } 
}); 
2
var result = null; 
Objects.forEach(function(obj, i){ 
    if(obj.cupon_code == 'COUPON1'){ 
     return result = obj; 
    } 
}); 
console.log(result); 

Ceci va parcourir votre Array et vérifier le coupon_code pour la valeur spécifiée. S'il a trouvé quelque chose, il le renverra au result.

Notez que Array.forEach est disponible depuis JavaScript 1.6. Vous voudrez peut-être jeter un oeil à which browser are supporting.

+0

Ne fonctionnerait que dans les navigateurs prenant en charge ECMAScript5 – loxxy

3

Ecrivez une fonction de recherche générique:

function find (arr, key, val) { // Find array element which has a key value of val 
    for (var ai, i = arr.length; i--;) 
    if ((ai = arr[i]) && ai[key] == val) 
     return ai; 
    return null; 
} 

Appel comme suit:

find (arr, 'coupon_code', 'COUPON1') 
Questions connexes