Question

Si j'ai les éléments suivants:

{"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 "hdrs" name (c.-à-d. "Make"), comment puis-je référencer les instances du tableau data ? semble que data [& Make; "] [0] devrait fonctionner ... mais impossible d’obtenir la bonne référence

MODIFIER

Désolé pour l'ambiguïté .. Je peux parcourir hdrs pour obtenir chaque nom hdr, mais je dois utiliser chaque valeur d'instance de hdrs pour rechercher tous les éléments de données. dans data (pas sûr que ce soit une meilleure explication). et je l'aurai dans une variable t puisqu'il s'agit de JSON (appréciez le re-marquage), j'aimerais pouvoir faire référence à quelque chose comme ceci: t.data [hdrs [i ]] [j]

Était-ce utile?

La solution

J'ai dû modifier un peu votre code:

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 modification

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]] );
}           

Autres conseils

Alors, 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 vous comprends bien ...

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 votre recherche de tableau / hachage à l'envers :)

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 souhaitez simplement vous référer au champ référencé par le premier en-tête, cela ressemble à quelque chose comme:

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

d’abord, vous avez oublié les virgules de fin dans vos éléments de tableau de données.

essayez ce qui suit:

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 dernière virgule n'est pas strictement nécessaire, mais vous permet de déplacer plus facilement les lignes (c.-à-d. si vous déplacez ou ajoutez après la dernière ligne et si Si vous n’avez pas de virgule, vous devez vous souvenir de l’ajouter. Je pense qu’il est préférable de toujours avoir des virgules de fin.)

peut-être essayer data [0] .Faire

Fermer, vous utiliseriez

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

Votre code affiché n’est pas correct du point de vue de la syntaxe. il faut des virgules. Je me suis mis au travail:

$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 puis je peux accéder aux données en tant que:

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

Avec l'aide des réponses (et après avoir corrigé correctement les boucles intérieure et extérieure), j'ai réussi à faire fonctionner ceci:

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>";
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top