16

キーで辞書をソートするにはどうすればよいですか

dict["word_21"] = "Hello Java";
dict["word_22"] = "Hello World";
dict["word_11"] = "Hello Javascript";

私が得るように

dict["word_22"] = "Hello World";
dict["word_21"] = "Hello Java";
dict["word_11"] = "Hello Javascript";

インデックスのみに word_number の組み合わせがあり、値は文字列です。インデックスは異なります (等しい値はありません) が、エラーの場合は「未定義」になる可能性があります

編集:実際には、降順と昇順が必要です。しかし、現時点では降順が必要です。

4

5 に答える 5

27

ここでキー値マップ (「辞書」と呼ばれる) として使用される JavaScript オブジェクトには順序がありません。すなわち。あなたはそれを並べ替えることができません。

そのためには配列が必要です。

[
    {id: "word_11", entry:"Hello Javascript"},
    {id: "word_21", entry:"Hello Java"},
    {id: "word_22", entry:"Hello World"},
]

次に、 IDまたはエントリで並べ替えることができます。そのために id-sort-algorithmを使用できます。


または、ソートされていないデータ構造の隣に、キーの配列を使用してソートすることもできます。これは、最良の (効率的な) 最も単純なアプローチかもしれません。

var dict = {
    "word_21": "Hello Java",
    "word_22": "Hello World",
    "word_11": "Hello Javascript"
}; // init (like your example)

var keys = Object.keys(dict); // or loop over the object to get the array
// keys will be in any order
keys.sort(); // maybe use custom sort, to change direction use .reverse()
// keys now will be in wanted order

for (var i=0; i<keys.length; i++) { // now lets iterate in sort order
    var key = keys[i];
    var value = dict[key];
    /* do something with key & value here */
} 
于 2012-06-08T11:18:14.150 に答える
26

これを試して

var sorted = [];
for(var key in dict) {
    sorted[sorted.length] = key;
}
sorted.sort();

キーで並べ替えdictてオブジェクトに書き戻すのは意味がありませんが、次のようになります。

function sortOnKeys(dict) {

    var sorted = [];
    for(var key in dict) {
        sorted[sorted.length] = key;
    }
    sorted.sort();

    var tempDict = {};
    for(var i = 0; i < sorted.length; i++) {
        tempDict[sorted[i]] = dict[sorted[i]];
    }

    return tempDict;
}

dict = sortOnKeys(dict);
于 2012-06-08T10:16:50.637 に答える
0

簡単に言えば、ディクショナリ型には keys() メソッドがありませんが、オブジェクト型にはあります。Object.keys() メソッドを iterable に渡し、.sort() メソッドを持つリストとしてキーを取得できます。

Object.keys({r:2,d:2,c:3,p:0})
// returns ["r", "d", "c", "p"]
Object.keys({r:2,d:2,c:3,p:0}).sort()
// returns ["c", "d", "p", "r"]
Object.keys([6,7,8,9])
// returns ["0", "1", "2", "3"]

そして最後に、OP のコードを jsFiddle しましょう。

更新:ベルギの答えはあまりにも多く、「良い答え」の部分を完全に見逃していました。彼が私の jsFiddle で行ったのと同じことをしたことにさえ気づきませんでした。

于 2014-11-10T18:20:52.883 に答える