natsort.js

概略

配列を自然言語アルゴリズムでソートします。

ダウンロード

使い方

natsort(array)

第一引数に指定された配列をソートします。(※この動作は破壊的です。)

var array = ['a10', 'b1', '110', 'a5', 'c01', '0718', 'c20', 'a02', 'b010', 'c3', '578'];

natsort(array);

alert('[' + array.join(', ') + ']');  // [110, 578, 0718, a02, a5, a10, b1, b010, c01, c3, c20]

配列の要素値が String 型でない場合、String 型に型変換(キャスト)した値を比較してソートします。

var array = [
  ['a', 10],       // ToString -> "a,10"
  ['b', 1],        // ToString -> "b,1"
  ['110', 'test'], // ToString -> "110,test"
  ['a', 5],        // ToString -> "a,5"
  ['b', '0718'],   // ToString -> "b,0718"
  ['20', '02']     // ToString -> "20,02"
];

natsort(array);

for (var i = 0, len = array.length, results = []; i < len; i++) {
  results.push('[' + array[i].join(', ') + ']');
}

alert('[' + results.join(', ') + ']'); // [[110, test], [20, 02], [a, 5], [a, 10], [b, 1], [b, 0718]]

natsort() は故意に汎用的です。引数 array が配列であることを要求しません。(この挙動は ECMAScript 5 の Array.prototype.sort(comparefn) に倣っています。)

var object = {0: 'a10', 1: 'b1', 2: '110', 3: 'a5', 4: 'c01', 5: '0718', 6: 'c20', length: 7};

natsort(object);

alert('[' + Array.prototype.join.call(object, ', ') + ']'); // [110, 0718, a5, a10, b1, c01, c20]

natsort(array, callbackfn)

第二引数にコールバック関数を指定することも出来ます。各々の要素から比較対象を返すコールバック関数を指定してください。

function callbackfn (array) { // 配列の要素を受け取る
  return array[1];            // (例) 要素値が ['foo', '2175'] なら '2175' で比較する
}

var array = [
  ['foo', '2175'],
  ['hoge', 'a0123'],
  ['num', '100'],
  ['piyo', 'a3'],
  ['num', 'b456'],
  ['hoge', 'b03']
];

natsort(array, callbackfn);

for (var i = 0, len = array.length, results = []; i < len; i++) {
  results.push('[' + array[i].join(', ') + ']');
}

alert('[' + results.join(', ') + ']'); // [[num, 100], [foo, 2175], [piyo, a3], [hoge, a0123], [hoge, b03], [num, b456]]

デモ

カンマ区切りで文字列の配列を入力して [ソート] をクリックすると、自然言語アルゴリズムでソートされた配列が出力されます。

参考URL

natsort
その他