JavaScriptで昇順にソートするには?

[上に] [前に] [次に]
にょろにょろ 2000/02/21(月) 05:59:56
 JavaScriptで、配列内容を小さい順に並べ替えようとして
います。過去ログで検索してみましたが、どれもPerlの内容
でした。

<html>
<head>
<script language="JavaScript">
<!--
var aryHoge = new Array();//1〜10までの数字を入れる配列
for (var i=0 ; i<10 ; i++)
{
    aryHoge[i]=10-i;
}
function Hoge() {

    aryHoge.sort();//並べ替え
    alert(aryHoge);//結果を表示

}
// -->
</script>
</head>
<body>
<form>
<input type="button" value="ソート" onClick="Hoge()">
</form>
</body>
</html>


配列名.sort(★)

で、★に戻り値が正の比較関数を入れると、昇順にソートできる
と聞いたのですが、その★の使い方がわかりません。★を省略
すると、辞書順のソート(1,10,2,3,4,……)になり、大小が
狂ってしまいます。

 どうすれば、昇順にソートできるのでしょうか?

Ichi 2000/02/21(月) 07:08:39
http://www.tohoho-web.com/js/array.htm
比較関数は、foo(a,b)のように二つの引数を持ちます。
ここで、引数a,bを比較して、等しかったら0、
aが大きかったら正の値、bが小さかったら負の値を返すと、
昇順にソートできると思います。
(降順かもしれません、試してみてください。
正負を逆にすれば、逆の順序にソートできます)

Ni 2000/02/21(月) 09:18:40
にょろにょろさんの状況(何も指定しない)だと文字列
で比較されているだけだと思います、
単純に sort(a-b)で良かったような気が…

にょろにょろ 2000/02/22(火) 07:15:03
[[解決]]
 うぐぅ、こんな身近なところに回答があったとは(>_<)。


 なるほど、比較関数は後ろに()をつけないんですね。
どうりでいくら試してもできないわけだ……。

function func(a, b){return(a-b);}//比較関数

aryHoge.sort(func);//昇順にソート
alert(aryHoge);//結果を表示


>単純に sort(a-b)で良かったような気が…
 aが存在しないと怒られました(^^;。どうやら、aとbを引数と
思ってくれないようです。

 Ichiさん、Niさん、ありがとうございました。おかげさまで
自前のバブルソート関数が2行に変身し、すっきりしました。

[上に] [前に] [次に]