« Zaurusで英文音声合成 CMU Flite 1.3 releaseのZaurus向けパッケージ | Main | 車輪格納式インラインスケート「インストレック(Instrek)」インプレッション(2) »

2006.09.21

JavaScriptで都道府県コード順ソート

ざっとググってみたら、JavaScriptの都道府県コード順ソートのソースが見当たらないみたいなので掲載します。
以前の記事と似ていますが、InDesignは関係ありません。

SrtingオブジェクトとArrayオブジェクトに都道府県コード順ソートのメソッドを追加します。

並びはJIS X 0401による都道府県コードに準拠しています。

都道府県以下は文字コード順ソートです。

使用例

"沖縄県い\r\n東京う\r\nインドい\r\n沖縄県あ\r\n東京い\r\n沖縄県う\r\n東京あ\r\n北海道う\r\nインドあ".kenSort(0);

myArray.kenSort(1);

引数0が昇順、引数1が降順です。降順っていうのは使わないと思いますが。

ソースコード

String.prototype.kenSort=function(order)
{
// 改行コードの割り出し
var lf = "";
RegExp(/\r\n|\r|\n/g).test(this)
lf = RegExp["$&"];

var tempArr = this.split(/\r\n|\n|\r/);
var sortedArr = tempArr.kenSort(order);
return sortedArr.join(lf);
}

Array.prototype.kenSort=function(order)
{
var kenArray = getKenArray();

// 都道府県順ソート
this.sort(
function(x, y)
{
// 引数が0か無しなら昇順
if(!order){return ken2int(x) - ken2int(y);}
// 引数が0以外なら降順
else{return ken2int(y) - ken2int(x);}
}
)

// 都道府県ごとの文字コード順ソート
var tempArray = new Array();
var tempArray2 = new Array();

for(i = 0; i < this.length; i++) // 配列の要素ごとになめる
{
for(j = 0; j < kenArray.length; j++) // 都道府県の配列でなめる
{
if(RegExp(kenArray[j]).test(this[i])) // 配列の要素が都道府県にマッチしたら
{
for(k = i; RegExp(kenArray[j]).test(this[k]) ; k++) // マッチしなくなるまで配列の次の要素を調べる
{
;
}
tempArray2 = this.slice(i, k).sort(); // 都道府県ごとのまとまりでソート
for(l = 0; l < tempArray2.length; l++) // テンポラリの配列に1要素ずつ追加
{
tempArray.push(tempArray2[l]);
}
i = k; // 配列が進んだ分を反映
}
}
}

return tempArray;
}

function getKenArray()
{
return new Array(
"北海道","青森県?","岩手県?","宮城県?","秋田県?","山形県?","福島県?",
"茨城県?","栃木県?","群馬県?","埼玉県?","千葉県?","東京都?","神奈川県?",
"新潟県?","富山県?","石川県?","福井県?","山梨県?","長野県?","岐阜県?",
"静岡県?","愛知県?","三重県?","滋賀県?","京都府?","大阪府?","兵庫県?",
"奈良県?","和歌山県?","鳥取県?","島根県?","岡山県?","広島県?","山口県?",
"徳島県?","香川県?","愛媛県?","高知県?","福岡県?","佐賀県?","長崎県?",
"熊本県?","大分県?","宮崎県?","鹿児島県?","沖縄県?",".");
}

function ken2int(str)
{
var kenArray = getKenArray();
for(i = 0; i < kenArray.length; i++)
{
var regexp = new RegExp(kenArray[i], "g");
if(str.match(regexp))
{
// 都道府県コード返却。配列の[0]がコード1に対応するので1足す
return i + 1;
}
}
}

|

« Zaurusで英文音声合成 CMU Flite 1.3 releaseのZaurus向けパッケージ | Main | 車輪格納式インラインスケート「インストレック(Instrek)」インプレッション(2) »