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

bekommen

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]

War es hilfreich?

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:

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: 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.)

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 += "&nbsp;" ; }
    else { myTable += t.data[i][t.hdrs[j]] ; }
  myTable += "</td>";
 }
 myTable +=    "</tr>";
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top