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