2016-03-21 29 views
0

war ich nicht ganz sicher, was diese Frage zu nennen, aber hier ist das, was ich tun möchte:JavaScript Objektschlüssel in einer x Länge Array

Ich bin derzeit eine Reihe geneator für chartjs erstellen, die mir meine Datensätze erstellen helfen.

jetzt die Art, wie ich es tun möchte, ist einfach mit , um Daten von jedem Element in meinem Array zu extrahieren.

Jedes Element eines Arrays könnte wie folgt aussehen:

enter image description here

, wie Sie dieses Objekt enthält andere Objekte in ihnen sehen können.

Dies schafft ein Problem sagen, weil ich den Namen des Objekts feedback_skill möchte ich folgendes tun würde:

  data.forEach(function (x) { 
      x['feedback_skill']['name'] 
     }); 

, die in einer Variablen halten werden können.

Nun, was ich tun könnte, übergeben Sie das folgende Array: serieKey = ['feedback','name'] was darauf hindeutet, dass das erste Element im Array der erste Schlüssel ist und das nächste Element ist die Variable, die ich treffen will.

Allerdings können diese Datensätze eine unbegrenzte Anzahl von Schichten aufweisen, so meine Frage an euch ist:

Gibt es eine intelligente Art und Weise, dies zu tun?

Antwort

1

Ich kenne keine native JavaScript-Methode, aber verschiedene JavaScript-Frameworks ermöglichen den Zugriff auf Deep-Eigenschaften von Objekten wie diesem. Zum Beispiel hat Dojo lang.getObject und ich kann sehen, dass es eine JQuery plugin gibt, die etwas ähnliches tut, lodash as well. Wenn Sie diese Frameworks nicht verwenden, können Sie immer Ihre eigene util-Funktion erstellen, um etwas Ähnliches auszuführen.

Diese Arten von Utility-Funktion ermöglicht es Ihnen, das Ziel als „Punktnotation“ Eigenschaft zu übergeben, so dass man nennen könnte:

lang.getObject("feedback_skill.name", false, x) 

Dojo und der Verwendung zum Beispiel, aber sie sind alle viel von einem muchness .

+0

Wissen Sie, ob eckig so etwas erlaubt? –

+0

Ich habe Angular noch nicht benutzt, leider weiß ich nicht - sorry! –

+0

loadash hat dieses Problem vollständig gelöst! : D –

0

Ich sehe kein Problem mit dem Ansatz, unbegrenzte Anzahl von Schichten kann auf die folgende Art und Weise behandelt werden:

data.forEach(function(x){ 
    for(i in seriesKey) 
     x = x[seriesKey[i]]; // x will contain whatever you wanted to retrieve when the loop ends 
    doSomething(x); 
} 

seriesKey kann mit so vielen Elementen in Ihrem Beispiel ein Array wie das sein Sie müssen die gewünschte Tiefe erreichen.

Verwandte Themen