2008-09-17 8 views
0

Si je donne les résultats suivants:tableau JavaScript référence

{"hdrs": ["Make","Model","Year"], 
"data" : [ 
    {"Make":"Honda","Model":"Accord","Year":"2008"} 
    {"Make":"Toyota","Model":"Corolla","Year":"2008"} 
    {"Make":"Honda","Model":"Pilot","Year":"2008"}] 
} 

Et j'ai un nom « de hdrs » (à savoir « faire »), comment puis-je référencer les instances de tableau data? semble comme data["Make"][0] devrait fonctionner ... mais incapable d'obtenir la bonne référence

EDIT

Désolé pour l'ambiguïté .. Je peux boucle par hdrs pour obtenir chaque nom de hdr, mais je dois utiliser chaque valeur d'instance de hdrs pour trouver tous les éléments de données dans data (pas sûr que ce soit une meilleure explication). et je l'ai dans une t variables puisqu'il est JSON (apprécier la re-marquage) Je voudrais être en mesure de faire référence à quelque chose comme ceci: t.data[hdrs[i]][j]

+0

manquant une virgule entre les valeurs de tableau dans le tableau de données. – Jared

+0

merci beaucoup pour l'aide .. oui, j'ai changé les noms pour le poste et foiré la syntaxe, merci encore –

Répondre

3

je dû modifier votre code un peu:

var x = {"hdrs": ["Make","Model","Year"], 
     "data" : [ 
      {"Make":"Honda","Model":"Accord","Year":"2008"}, 
      {"Make":"Toyota","Model":"Corolla","Year":"2008"}, 
      {"Make":"Honda","Model":"Pilot","Year":"2008"}] 
     }; 

     alert(x.data[0].Make); 

EDIT: en réponse à votre modifier

var x = {"hdrs": ["Make","Model","Year"], 
     "data" : [ 
      {"Make":"Honda","Model":"Accord","Year":"2008"}, 
      {"Make":"Toyota","Model":"Corolla","Year":"2008"}, 
      {"Make":"Honda","Model":"Pilot","Year":"2008"}] 
     }; 
var Header = 0; // Make 
for(var i = 0; i <= x.data.length - 1; i++) 
{ 
    alert(x.data[i][x.hdrs[Header]]); 
}   
0

peut-être essayer des données [0] .Make

0

Fermer, vous utiliseriez

var x = data[0].Make; 
var z = data[0].Model; 
var y = data[0].Year; 
1

Donc, comme ça?

var theMap = /* the stuff you posted */; 
var someHdr = "Make"; 
var whichIndex = 0; 
var correspondingData = theMap["data"][whichIndex][someHdr]; 

Cela devrait fonctionner, si je comprends bien ... vous

1
var x = {"hdrs": ["Make","Model","Year"], 
"data" : [ 
    {"Make":"Honda","Model":"Accord","Year":"2008"} 
    {"Make":"Toyota","Model":"Corolla","Year":"2008"} 
    {"Make":"Honda","Model":"Pilot","Year":"2008"}] 
}; 

x.data[0].Make == "Honda" 
x['data'][0]['Make'] == "Honda" 

Vous avez bien ur tableau/recherche de hachage en arrière :)

0

Votre code tel qu'affiché n'est pas syntaxiquement correct; il a besoin de virgules. Je suis arrivé que cela fonctionne:

$foo = {"hdrs": ["Make","Model","Year"], 
"data" : [ 
    {"Make":"Honda","Model":"Accord","Year":"2008"}, 
    {"Make":"Toyota","Model":"Corolla","Year":"2008"}, 
    {"Make":"Honda","Model":"Pilot","Year":"2008"}] 
}; 

et je peux accéder à des données comme:

$foo["data"][0]["make"] 
+0

merci pour la réponse, vous avez raison sur les virgules, j'ai changé les noms pour le poste et foiré le syntaxe –

1

d'abord, vous avez oublié vos virgules de suivi dans vos éléments du tableau de données.

les opérations suivantes:

var obj_hash = { 
    "hdrs": ["Make","Model","Year"], 
    "data" : [ 
     {"Make":"Honda","Model":"Accord","Year":"2008"}, 
     {"Make":"Toyota","Model":"Corolla","Year":"2008"}, 
     {"Make":"Honda","Model":"Pilot","Year":"2008"}, 
    ] 
};

var ref_data = obj_hash.data;

alert(ref_data[0].Make);

@Kent Fredric: Notez que la virgule est pas strictement nécessaire, mais vous permet de déplacer plus facilement les lignes autour (par exemple, si vous déplacez ou ajouter après la dernière ligne, et il n'y avait pas de virgule, vous devriez vous souvenir d'en ajouter un, je pense qu'il est préférable d'avoir toujours des virgules.)

+0

[{}, {}, {},] <- dernière virgule ici * pas * nécessaire. –

1

Je ne suis pas sûr de comprendre votre question, mais ...

En supposant que le JSON ci-dessus est le var obj, vous voulez:

obj.data[0]["Make"] // == "Honda" 

Si vous voulez juste faire référence au champ référencé par le premier en-tête, ce serait quelque chose comme:

obj.data[0][obj.hdrs[0]] // == "Honda" 
0

Avec l'aide des réponses (et après avoir obtenu l'intérieur et l'extérieur des boucles correctes), j'ai eu ceci au travail:

var t = eval("(" + request + ")") ; 
for (var i = 0; i < t.data.length; i++) { 
myTable += "<tr>"; 
for (var j = 0; j < t.hdrs.length; j++) { 
    myTable += "<td>" ; 
    if (t.data[i][t.hdrs[j]] == "") {myTable += "&nbsp;" ; } 
    else { myTable += t.data[i][t.hdrs[j]] ; } 
    myTable += "</td>"; 
} 
myTable += "</tr>"; 
} 
Questions connexes