方法をすぐ忘れがちなので書く。


まず連想配列のキーを値でソートするときに把握しておくべきことが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】連想配列のキーを値でソートする

投稿ナビゲーション


【JavaScript】連想配列のキーを値でソートする” への1件のフィードバック

  1. ソースコード簡潔できれいじゃんって思ってたら気づいて顔中草まみれや

匿名 にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。