2016-05-28 5 views
1

Ich sah this topic und die Antworten, aber es scheint nicht für mich zu arbeiten. Ich habe versucht, alle Varianten der Werte im Objekt und sortieren, aber es scheint nicht zu funktionieren. Ich möchte eine Liste auf den Tasten bestellt bekommen (nicht ihre Werte) in den Objekten (die in diesem Beispiel 2 Objekte sind in in einem json):Bestellschlüssel aus Javascript Objekt

d3.json:

{ 
"TEST1": {"purchase": ["yes", 2], "safety": ["no", 3], "quality": ["Carried by the husk", 1], "name": ["Eggs!", 0]}, 
"TEST2": {"purchase": "yes", "safety": "no", "quality": "Carried by the husk", "name": "0"} 

}

Und das JavaScript:

d3.json("d3.json", function(root) { 

    for (key in root) { 
     console.log(root[key]); 
     var test = root[key]; 
     var list = Object.keys(test).sort(function(a,b){ return test[a]-test[b] }) 
     console.log(list); 
    } 
}); 

EDIT: Entschuldigt, ich war auf die erwarteten Ergebnisse nicht klar: ich war für die Schlüssel sortiert suchen, aber kehren mit ihren Werten als die Antwort von dlopez tat.

+0

Was sind die erwarteten Ergebnisse? – charlietfl

+0

Gute Frage, ich bearbeitet :) – CorneeldH

Antwort

2

Versuchen mit diesem verwenden:

var sortedByKeys = Object.keys(root) 
    .sort(function(a,b) { return a - b; }) 
    .reduce(function(prev, curr) { 
     prev[curr] = root[curr]; 
     return prev; 
    }, {}); 
+0

Danke! Vor allem für die Interpretation der gewünschten Ergebnisse :) Im Endeffekt benötigt einen zusätzlichen Schritt (beginnend mit (für Schlüssel in der Wurzel), sortieren Sie Ihren Code nur die Objekte in der Wurzel, nicht die in root [key]) und ich könnte weglassen die Sortierfunktion (wie durch aromatt angegeben): für (key in root) { \t var sortedByKeys = Object.keys (root [key]) \t .Sort() \t .reduce (Funktion (i, curr) { \t prev [curr] = root [key] [curr]; \t zurück prev; \t}, {}); \t console.log (sortedByKeys); } – CorneeldH

1

Mit der Funktion test[a] - test[b] in der Sortierrückruffunktion sortieren Sie nach den Eigenschaftswerten, nicht nach den Schlüsseln. Um die durch die Tasten zu sortieren können Sie verwenden:

var list = Object.keys(test).sort(function(a,b){ return a.localeCompare(b) }) 

, die die Standard-Sortierreihenfolge ist, so:

var list = Object.keys(test).sort() 
1

Sie einfach var list = Object.keys(test).sort();