私はしばらく探していましたが、このようなJavascriptオブジェクトをソートする方法が必要です:
{
method: 'artist.getInfo',
artist: 'Green Day',
format: 'json',
api_key: 'fa3af76b9396d0091c9c41ebe3c63716'
}
そして、ソートは名前のアルファベット順になります:
{
api_key: 'fa3af76b9396d0091c9c41ebe3c63716',
artist: 'Green Day',
format: 'json',
method: 'artist.getInfo'
}
これを行うコードは見つかりません。誰か助けてもらえますか?
定義では、オブジェクト内のキーの 順序は未定義 であるため、おそらくこれを行うことはできません将来性のある方法。代わりに、オブジェクトが実際にユーザーに表示されているときにこれらのキーを並べ替えることを検討する必要があります。内部で使用する並べ替え順序は、とにかく重要ではありません。
慣例により、ほとんどのブラウザーは、追加された順序でオブジェクト内のキーの順序を保持します。だから、あなたはこれを行うことができますが、常に機能すると期待しないでください:
function sortObject(o) {
var sorted = {},
key, a = [];
for (key in o) {
if (o.hasOwnProperty(key)) {
a.Push(key);
}
}
a.sort();
for (key = 0; key < a.length; key++) {
sorted[a[key]] = o[a[key]];
}
return sorted;
}
この関数はオブジェクトを取り、[key、value]の形式の配列のソートされた配列を返します
function (o) {
var a = [],i;
for(i in o){
if(o.hasOwnProperty(i)){
a.Push([i,o[i]]);
}
}
a.sort(function(a,b){ return a[0]>b[0]?1:-1; })
return a;
}
オブジェクトのデータ構造には、明確に定義された順序がありません。数学的には、オブジェクト内のキーのコレクションは順序付けられていないセットであり、そのように扱う必要があります。順序を定義する場合、配列を使用する必要があります。順序を持つ配列は信頼できる前提であるためです。何らかの順序を持つオブジェクトは、実装の気まぐれに任せられます。
結果を比較またはハッシュする必要がある場合は、 sorted stringify() を使用します。
// if ya need old browser support
Object.keys = Object.keys || function(o) {
var result = [];
for(var name in o) {
if (o.hasOwnProperty(name))
result.Push(name);
}
return result;
};
var o = {c: 3, a: 1, b: 2};
var n = sortem(o);
function sortem(old){
var newo = {}; Object.keys(old).sort().forEach(function(k) {new[k]=old[k]});
return newo;
}
// deep
function sortem(old){
var newo = {}; Object.keys(old).sort().forEach(function(k){ newo[k]=sortem(old[k]) });
return newo;
}
sortem({b:{b:1,a:2},a:{b:1,a:2}})
コードはオブジェクトプロパティの順序に依存してはならないため、これは注意して使用する必要があります。表示の問題(または単に楽しみの問題)の場合、プロパティを次のように深く並べ替えることができます。
function sortObject(src) {
var out;
if (typeof src === 'object' && Object.keys(src).length > 0) {
out = {};
Object.keys(src).sort().forEach(function (key) {
out[key] = sortObject(src[key]);
});
return out;
}
return src;
}