28

以下のようなオブジェクトがあります。値に基づいて昇順に並べ替えようとしています。Javascript 配列のソート方法に似ています。

    var masterList = {
    "1": "google",
    "2": "yahoo",
    "3": "msn",
    "4": "stackoverflow",
    "5": "github",
    "6": "jsfiddle",
    "7": "amazon",
    "8": "ebay"
}

良い解決策を教えてください...

4

3 に答える 3

59

JavaScript オブジェクトには順序がありません。ほとんどのブラウザーは、プロパティが作成された順序で反復処理を行いますが、保証はないため、オブジェクトでの並べ替えはサポートされていません。

詳細については、こちらを参照してください: JavaScript はオブジェクト プロパティの順序を保証しますか?

また、 John Resig がこの問題について述べていることにも興味があるかもしれません。


並べ替え可能なリストが必要な場合は、オブジェクトの配列として保存する必要があります。

var masterList = [
    { key: 1, val: "google" },
    { key: 2, val: "yahoo" },
    { key: 3, val: "msn" },
    { key: 4, val: "stackoverflow" },
    { key: 5, val: "github" },
    { key: 6, val: "jsfiddle" },
    { key: 7, val: "amazon" },
    { key: 8, val: "ebay" }
];

次に、それらを並べ替えるには、通常の配列のsortメソッドを使用します。

masterList = masterList.sort(function (a, b) {
    return a.val.localeCompare( b.val );
});

これがフィドルです:http://jsfiddle.net/ASrUD/

于 2013-01-08T05:21:18.030 に答える
8

    var obj = {
        "1": "google",
        "2": "yahoo",
        "3": "msn",
        "4": "stackoverflow",
        "5": "github",
        "6": "jsfiddle",
        "7": "amazon",
        "8": "ebay"
    };

    var arr = [];

    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            arr.push(obj[key]);
        }
    }
    
    alert(arr.sort());

これにより、値が昇順で並べ替えられます。いつかそれをオブジェクトに変換する方法を教えてあげましょう。

于 2013-01-08T06:05:12.043 に答える