数字をソート

var aa = [3, 9, 10, 8, 5, 4, 2, 1, 7, 6, 0, 20]

これを単にsort()でソートすると、1の次に10、2の次に20が来てしまう。
どうやら最初の文字で順番が決まってしまう様子。


なので、最初に文字数を付けてからソートすればいいのかな、と思い
最初に文字数を付けて、それをソートして、それから最初の文字を削ればいいのか?
というわけで実行。

var aa = [3, 9, 10, 8, 5, 4, 2, 1, 7, 6, 0, 20];
var bb = new Array();
for (var i in aa) {bb.push(String(aa[i]).length + String(aa[i]));}
bb = bb.sort();
var cc = new Array();
for (var j in bb) {cc.push(bb[j].slice(1));}
alert(cc.join(", "));

見事に順番通り、0から20になった。


しかし、もっと簡単に並べる方法を偶然見掛けたサイトで偶然知った。
↓こんな感じ。

var aa = [3, 9, 10, 8, 5, 4, 2, 1, 7, 6, 0, 20];

alert(aa.sort(pp).join(", "));

function pp(a, b) {return a - b;}

sort()の括弧に直接a - bを入れてはいけないらしい。
理屈はわからん、aからbということで順番に並べろという事だろう、ふーん。


と、思いきや
半角のアルファベットなら何でもよろしいようで
U - Zでも同じ結果に。
まあ、順番に並べろという事だろう、ふーん。


と、思いきや
U - aでも同じ結果に。
ふーん、としか言いようがない。


あ、タイトル変えてみた。「むきーっ!」は飽きた。