2016-05-28 8 views
1

私はthis topicと答えを見ましたが、それは私にとってはうまくいかないようです。私はObjectとsortの値のalllバリエーションを試しましたが、うまくいかないようです。Javascriptオブジェクトのキーを注文する

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"} 

}

私はオブジェクト(この例では2つのオブジェクトは、JSONでである)のキー(ないそれらの値)に順序付けられたリストを取得したいです

と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); 
    } 
}); 

編集:私は、ソートのキーを探していましたが、dlopezの答えが行ったように、それらの値を返す:謝罪、私は期待どおりの結果に明確ではありませんでした。

+0

期待される結果は何ですか? – charlietfl

+0

良い質問、私は編集しました:) – CorneeldH

答えて

2

を使用することができ、これに試してみてください:

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

ありがとう!特に望ましい結果を解釈するために)余分なステップが必要になりました(ルートでキーのために)、コードはルート内のオブジェクトをソートするだけで、ルート[キー]内のオブジェクトはソートしません。 (aromattによって記載されるように)ソート機能(ルートでキー){ \tするvar sortedByKeys = Object.keys(ルート[キー]) \t .sort() \t .reduce(関数(PREV、CURRため ){ \t prev [curr] =ルート[key] [curr]; \t return prev; \t}、{}); \t console.log(sortedByKeys); } – CorneeldH

1

ソートコールバック関数でtest[a] - test[b]を使用すると、キーではなくプロパティ値でソートされます。キーでソートするには、これを使用することができますので、デフォルトのソート順です

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

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

あなたは単に var list = Object.keys(test).sort();

関連する問題