Frage
Wenn ich die folgende:
{"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"}
{"Make":"Toyota","Model":"Corolla","Year":"2008"}
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
}
Und ich habe einen "hdrs" name (d "Make"), wie kann ich die data
Array Instanzen verweisen?
scheint wie data["Make"][0]
sollte funktionieren ... aber nicht in der Lage die richtige Referenz
Bearbeiten
Sorry für die Mehrdeutigkeit .. Ich kann Schleife durch hdrs
jeder hdr-Namen zu erhalten, aber ich brauche jede Instanz Wert von hdrs
verwenden, um alle Datenelemente in data
zu finden (nicht sicher, dass ist besser einer Erklärung). und ich werde es in einer Variablen t
haben, da es JSON (schätzen die Re-Tagging) ist, würde ich in der Lage sein mag mit so etwas wie dieses zu verweisen: t.data[hdrs[i]][j]
Lösung
Ich hatte Ihren Code ein wenig zu ändern:
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: als Antwort auf Ihre bearbeiten
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]] );
}
Andere Tipps
So, wie das?
var theMap = /* the stuff you posted */;
var someHdr = "Make";
var whichIndex = 0;
var correspondingData = theMap["data"][whichIndex][someHdr];
Das sollte funktionieren, wenn ich verstehe Sie richtig ...
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"
Sie haben Ihr Array / Hash-Lookup zurück :)
Ich bin mir nicht sicher, ob ich verstehe Ihre Frage, aber ...
Unter der Annahme der oben JSON ist die var obj, Sie wollen:
obj.data[0]["Make"] // == "Honda"
Wenn Sie gerade auf das Feld durch den ersten Header verwiesen beziehen mögen, wäre es so etwas wie:
obj.data[0][obj.hdrs[0]] // == "Honda"
zuerst, vergessen Sie Ihre Hinter Kommas in den Daten Array-Elementen.
versuchen Sie Folgendes:
@ Kent Fredric: beachten Sie, dass das letzte Komma ist nicht unbedingt erforderlich, sondern ermöglicht es Ihnen leichte Linien bewegen zu (dh, wenn Sie sich bewegen oder nach der letzten Zeile hinzufügen, und es hat nicht ein Komma, dann würden Sie speziell müssen bedenken, der seine Meinung. ich denke, es ist am besten Hinter Kommas immer.)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);
vielleicht versuchen, Daten [0] .Make
Schließen, würden Sie verwenden
var x = data[0].Make;
var z = data[0].Model;
var y = data[0].Year;
Ihr Code wie angezeigt ist nicht syntaktisch korrekt; es braucht einige Komma. Ich habe dies funktioniert:
$foo = {"hdrs": ["Make","Model","Year"],
"data" : [
{"Make":"Honda","Model":"Accord","Year":"2008"},
{"Make":"Toyota","Model":"Corolla","Year":"2008"},
{"Make":"Honda","Model":"Pilot","Year":"2008"}]
};
und dann kann ich Zugriff auf Daten wie:
$foo["data"][0]["make"]
Mit Hilfe der Antworten (und nach innen immer und außen Schleifen richtig) Ich habe dies funktioniert:
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 += " " ; }
else { myTable += t.data[i][t.hdrs[j]] ; }
myTable += "</td>";
}
myTable += "</tr>";
}