JavaScript配列をソートする際に利用するコールバック関数

最終更新日

お休み終わっちゃいましたけど、みなさまいかがお過ごしでしょうか。
わたし自身は年度末進行の余波がGW前まで続く都合上、3月・4月は色々と余裕のない状態で過ごしました。GenerativeArtネタ大量に投入しましたが、これらは数年かけて蓄積していた代物でして、今現在書こうと思っても書けるかどうかってものも混じってたりします。いちばん手間取ったのがペアノ曲線で、こいつだけは端っこの方を調整したら真ん中がこんがらがったり、depth深くしたら帰ってこなくなったりで散々でした。
今回はそういったものから離れて所謂小ネタって呼ばれる類のものをご紹介しましょう。ExtendScriptなんかで数値の配列をソートする際に、仕様で2の前に10が来ちゃうんですけど、これを粛清する際に使うコールバック関数がとても単純なものなので毎回毎回毎回毎回書いていたりします。保存しとけよってことなんですけど、渋々情報として整理したものをこちらに残しておこうと思います。

sort関数の並べ替えというのは要素を文字列で処理しちゃいます。ですから

var a =[1,2,8,10,12,50,100]
alert(a.sort())

なんて処理を行うと…

1, 10, 100, 12, 2, 50, 8

こうなります。
この何が何でも文字列って挙動を粛清するためにコールバック関数というのが利用可能です。今回用意したのは以下のようなものです。

function sortNum(a,b)
{
  if (a>b) return 1;
  else if (a<b)return -1;
  else return 0;
}

ごく単純な関数で、引数a,bの大小を比較しaが大きければ1をbが大きければ-1を、a=bなら0を返すという挙動です。
sortメソッドは、この関数を引数に渡されると各要素の比較処理にこの関数を利用します。

ということで、先程のスクリプトのsort関数の引数にコールバック関数を指定して実行してみると…


var a =[1,2,8,10,12,50,100]
alert(a.sort(sortNum))

function sortNum(a,b)
{
  if (a>b) return 1;
  else if (a<b)return -1;
  else return 0;
}

1, 2, 8, 10, 12, 50, 100

この様に数値としてソートしてくれます。
……と、こういうふうに情報として残したんですけど、次もきっとコールバック関数を手入力すると思います(^-^;

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする