方法をすぐ忘れがちなので書く。
まず連想配列のキーを値でソートするときに把握しておくべきことが2つある。
1つ目は
array.sort(compareFunction)
のcompareFunciton
(比較関数)で、これは2つの値a,bが与えられたときにaがbより前に来るならば正の値を、aがbより後に来るならば負の値を返す。等しければ0である。
例えば数値型なら、
function Compare(a,b){
return a-b;
}
とかすることで昇順にソートすることができる。つまり、降順にするならb-aを返せばよい。
2つ目はforの挙動で、連想配列arrに対して
for(var e in arr)
とやったときにeに代入されるのはarrのキーである。
だから、
var arr={"A":0,"B":1,"C":2,"D":3};
for(var e in arr)console.log(e);
とやると
A
B
C
D
になるし、実は連想配列でなくても
var arr=["A","B","C","D"];
for(var e in arr)console.log(e);
とやると
0
1
2
3
とeに添字が代入されていることがわかる。
以上を踏まえて連想配列のキーを値でソートするプログラムを書く。ここでは簡便のために値は数値型だとする。
並べ替えるのはキーだから、キーを格納した配列を作っておく(10行目)。比較されるのは値だから、比較関数では値で比較結果を返す(13行目)。
(ソース)
var arr={
"yajue":810,
"iku":1919,
"iiyo":114514,
"miroyo":364364,
"kusai":931,
"yakuza":893
};
var keys=[];
for(var key in arr)keys.push(key);
function Compare(a,b){
return arr[a]-arr[b];
}
keys.sort(Compare);
console.log(keys);
(結果)
[ 'yajue', 'yakuza', 'kusai', 'iku', 'iiyo', 'miroyo' ]
ソースコードの例がきたないのは勘弁してください
【JavaScript】連想配列のキーを値でソートする
ソースコード簡潔できれいじゃんって思ってたら気づいて顔中草まみれや