JavaScriptのsortの基本についてメモする。
配列はそのまま表示すると、カンマで区切られて表示される。
ars=new Array(1,3,2,5,4);
document.write(ars);
document.write(ars);
結果
1,3,2,5,4
ソートするには次のようにsortを使う。
ars=new Array(1,3,2,5,4);
ars.sort();
document.write(ars);
ars.sort();
document.write(ars);
結果
1,2,3,4,5
特に指定しないと昇順になる。降順にするには次のように関数を指定する。
ars=new Array(1,3,2,5,4);
ars.sort(function(a,b){
return(b-a);
});
document.write(ars);
ars.sort(function(a,b){
return(b-a);
});
document.write(ars);
結果
5,4,3,2,1
sortの引数に関数を指定すると複雑なソートが可能になる。
昇順にする場合には引数は不要であるが、あえて書くと次のようになる。
ars=new Array(1,3,2,5,4);
ars.sort(function(a,b){
if(a>b){
return(1);
}else{
return(-1);
}
})
document.write(ars);
ars.sort(function(a,b){
if(a>b){
return(1);
}else{
return(-1);
}
})
document.write(ars);
結果
1,2,3,4,5
「a,b」が降順ならば「a>b」なので入れ替える。このときは1を返す。
昇順ならば入れ替えない。このときは-1を返す。
このようなルールを関数の部分に定めればよい。
なおJScriptのマニュアルには次のように書かれている。
引数 sortFunction に指定する場合は、次の戻り値を返すような関数を指定する必要があります。
- 1 つ目の引数が 2 つ目の引数よりも小さい場合は、負の値を返す関数。
- 2 つの引数が等しい場合は 0 を返す関数。
- 1 つ目の引数が 2 つ目の引数よりも大きい場合は、正の値を返す関数。
「0を返す」が必要なケースが思い浮かばない。
コメント