Ich versuche, auf Objekte zuzugreifen, die in einem Array verschachtelt sind. Ich fange mit diesem JSON Objekt (das aus einer XML-Datenbankausgabe abgeleitet wurde):Durchschachteln der Verschachtelung von Objekten und Arrays mit Javascript und Unterstrich
{"report":
{"date":"15 Apr 2016",
"metrics":
{"metric":
[
{"name":"Bank Angle",
"display_parent_group":"Bankfull",
"display_child_group":"SiteShape",
"tolerance":"0.05",
"visits":
{"visit":
[
{"visit_id":"3047","value": "0.47"},
{"visit_id":"2164","value": "0.55"},
{"visit_id":"1568","value": "0.72"},
{"visit_id":"3431","value": "0.12"},
{"visit_id":"2428","value": "0.44"},
{"visit_id":"1567","value": "0.49"}
]}},
{"name":"Bank Angle SD",
"display_parent_group":"Bankfull",
"display_child_group":"SiteShape",
"tolerance":"0.05",
"visits":
{"visit":
[
{"visit_id":"3047","value": "0.12"},
{"visit_id":"2164","value": "0.05"},
{"visit_id":"1568","value": "0.21"},
{"visit_id":"3431","value": "0.68"},
{"visit_id":"2428","value": "0.22"},
{"visit_id":"1567","value": "0.13"}
]}},
{"name":"Bankfull Area",
"display_parent_group":"Bankfull",
"display_child_group":"SiteSize","tolerance":"0.05",
"visits":
{"visit":
[
{"visit_id":"3047","value": "202"},
{"visit_id":"2164","value": "193"},
{"visit_id":"1568","value": "115"},
{"visit_id":"3431","value": "258"},
{"visit_id":"2428","value": "89"},
{"visit_id":"1567","value": "206"}
]}}
]
}
}
}
I dann Unterstreichungs verwenden, um eine Teilmenge von metric
Objekten zu extrahieren:
var table_metric = JSONData.report.metrics.metric;
var target_metrics = _.where(table_metric, {
display_parent_group : 'Bankfull', display_child_group: 'SiteShape'
});
dies mit zwei in einer Anordnung resultiert verschachtelte Objekte. Wo ich ein Problem habe, greife ich dann auf das Array von Objekten zu, das innerhalb von visits.visit
verschachtelt ist. Wenn zum Beispiel möchte ich ein Array von Werten mit dem Schlüssel visit_id
verbunden bauen, und ich versuche:
function buildVisitIDArray(target_metrics) {
var attrList = [];
for(var i=0; i<target_metrics.length; i++) {
var visit_records = target_metrics[i].visits[1];
console.log(visit_records);
for(visit_record in visit_records) {
attrList.push(_.pluck(visit_record, "visit_id"));
}
}
return attrList
}
ich nur eine Reihe von undefinierten Ergebnissen. Ich habe Stunden damit verbracht, Variationen der Syntax auszuprobieren, um an die verschachtelten "Besuchs" -Objekte zu kommen, aber ich kann es einfach nicht herausfinden.
Jede Hilfe wird für diesen Anfänger sehr geschätzt!
Danke André. Jetzt bekomme ich ein Array mit der richtigen Länge (5), aber alle Elemente sind 'undefiniert'. Ich mache immer noch nichts richtig. – jesselangdon
@ tinyplanet00 mein Fehler. Ich habe die Rückgabe der Funktion nicht gesehen. Behoben. In Ihrem for (visit_record in visit_records) ist der visit_record ein Schlüssel, kein Wert. Sie müssen also auf visit_records [visit_record] zugreifen. Jetzt gibt es eine Reihe von IDs zurück :) (der Code wird in meiner Lösung bearbeitet) –
Ah ja, das funktioniert wunderbar. Danke noch einmal! – jesselangdon