この JS オブジェクト リテラルがある場合:
var foo = {
Sussy: 4,
Billy: 5,
Jimmy: 2,
Sally: 1
};
新しいソートされたオブジェクト リテラルを作成するにはどうすればよいですか。
var bar = {
Sally: 1,
Jimmy: 2,
Sussy: 4,
Billy: 5
};
この JS オブジェクト リテラルがある場合:
var foo = {
Sussy: 4,
Billy: 5,
Jimmy: 2,
Sally: 1
};
新しいソートされたオブジェクト リテラルを作成するにはどうすればよいですか。
var bar = {
Sally: 1,
Jimmy: 2,
Sussy: 4,
Billy: 5
};
Re: JS オブジェクトをソートする方法は?
答え: できません。代わりに、より洗練されたデータ構造が必要です。多くのオプションがあります:
JS メカニズムを使用して順序を管理するため、解決策 3 をお勧めします。
例:
// Object holds sort order: (Solution 2)
var foo = {
Suzy: {v: 4, order: 0},
Billy: {v: 5, order: 1},
Jimmy: {v: 2, order: 2},
Sally: {v: 1, order: 3}
};
// Array holds keys: (Solution 3)
var woof = [
{k: 'Suzy', v: 4},
{k: 'Billy', v: 5},
{k: 'Jimmy', v: 2},
{k: 'Sally', v: 1}
];
// Sort the woof array by the key names:
woof.sort(function(a, b) {
return a.k.localeCompare(b.k);
});
// The third key and value:
woof[2].k; // the third key
woof[2].v; // the third value
編集: タイプミスを修正するためにコードを更新しました。ありがとう、@Martin Fido
オブジェクト プロパティは特定の順序ではなく (順序は実装に依存します)、プロパティを並べ替えることができません。
キーの配列を保持し、それに応じて並べ替える必要があります。次に例を示します。
var keys = [];
for(var key in obj) {
if(obj.hasOwnProperty(key)) {
keys.push(key);
}
}
keys.sort(function(a, b) {
return obj[a] - obj[b];
});
これで、配列の値を繰り返し処理し、それらを使用してオブジェクトの対応するプロパティにアクセスできます。