トップページ > JavaScript > クラスライブラリ集 > ソート用比較関数
 
ソート用比較関数
ver.1.1
<機能と特徴>
sort()関数を使用する際の比較関数集です。

数値としてのソート、逆順でのソートなどが出来ます。
   
インフォメーション


公開日 2005.1.21
最終更新日 2005.2.25
バージョン ver 1.1
動作確認
IE5.0 IE6.0 NN4.7 NN6.2 NN7.0
Opera7.5 FireFox1.0
取扱難易度 ★☆☆☆☆難易度1
cookie 不使用
CSS 不使用
更新履歴
2005.2.25 ver1.1 ナンバー判別ソート及び逆順ソート関数追加
 
リファレンス

 
ソース

<script language="JavaScript" type="text/javascript">
<!--
//copyright(C) 2005 あう http://www5c.biglobe.ne.jp/~horoau/
//ver1.1

//比較関数クラス
function comp()
{//数値ソート
 this.number = function(a,b)
 {if(!isNaN(a) && !isNaN(b))
  {return a-b;}
  else if(isNaN(a) && !isNaN(b))
  {return 1;}
  else if(!isNaN(a) && isNaN(b))
  {return -1;}
  else
  {if(a+"" === b+"")
   {return 0;}
   return (a+"" > b+"")? 1 : -1;}}

 //数値ソート逆順
 this.r_number = function(a,b)
 {if(!isNaN(a) && !isNaN(b))
  {return b-a;}
  else if(isNaN(a) && !isNaN(b))
  {return 1;}
  else if(!isNaN(a) && isNaN(b))
  {return -1;}
  else
  {if(a+"" === b+"")
   {return 0;}
   return (a+"" > b+"")? -1 : 1;}}

 //文字列ソート
 this.string = function(a,b)
 {if(a+"" === b+"")
  {return 0;}
  return (a+"" > b+"")?1 : -1;}

 //文字列ソート逆順
 this.r_string = function(a,b)
 {return comp.string(a,b)*(-1);}

 //混合ソート
 this.mix = function(a,b)
 {if(!isNaN(a) && !isNaN(b))
  {return a-b;}
  else if(isNaN(a) && !isNaN(b))
  {return ("0" >= a+"")?-1 : 1;}
  else if(!isNaN(a) && isNaN(b))
  {return ("0" >= b+"")?1 : -1;}
  return comp.string(a,b);}

 //混合ソート逆順
 this.r_mix = function(a,b)
 {if(!isNaN(a) && !isNaN(b))
  {return b-a;}
  else if(isNaN(a) && !isNaN(b))
  {return ("0" >= a+"")?1 : -1;}
  else if(!isNaN(a) && isNaN(b))
  {return ("0" >= b+"")?-1 : 1;}
  return comp.r_string(a,b);}

 //ナンバー判別ソート
 this.volume = function(a,b)
 {if(a.match(/^\D*/i)+"" == b.match(/^\D*/i)+"")
  {return a.match(/\d+/i) - b.match(/\d+/i);}
  else
  {return comp.number(a,b);}}

 //ナンバー判別ソート逆順
 this.r_volume = function(a,b)
 {if(a.match(/^\D*/i)+"" == b.match(/^\D*/i)+"")
  {return b.match(/\d+/i) - a.match(/\d+/i);}
  else
  {return comp.r_number(a,b);}}}

//インスタンス生成
comp = new comp();

// -->
</script>

 
開発日誌

[ 2005.2.25 ] ver.1.1

要望あるまで気付かないところだったけど 例えば書籍とかの巻数順に並べるときだとか 今回追加したような関数が必要になるんだね。 やっぱり実際に使ってみないと気付かない点ってのも 多々あるようで利用者の声って大事だよね。

結構手間かかるかなっても思ったけど やってみると案外簡単な関数で仕上がった気がする。
[ 2005.1.21 ] ver.1.0

他のソートの比較関数考えてたついでにちょっと作ってみたって感じのクラス。 このくらいのものならクラスにしなくてもユーザ定義関数集でも良さそうだけど やっぱりクラスにした方が名前がかぶることを配慮する対象が少なくなるし 一応クラスライブラリって言ってるわけだし。

それにしても最初は比較関数って何かややこしいイメージあったけど 単純に比べた2つのうちどっちを上にするかってだけなんだよね。 ホントはもっといろいろな条件の比較関数も考えたんだけど 実際作ろうと思うといろんなパターンがあり過ぎて 全部作るとクラス自体がややこしくなりそうなんで基本的なものだけにしておいた。 単位まで判別してソートするなんてことも可能なんだけどね。 いったいどれだけの種類の単位があるんだって話になってくるし。 何か要望でもあったらメールにて受け付けてます。



ウェブ木箱
copyright(C) 2005 あう