私は次のような数字を並べ替えようとしています:
<1E-8
0.000027
0.000061
0.0018
0.0094
<8.64e-12
0.049
「<」は、真の値が指定された数値よりも小さいことを意味します。
これが私の「降下関数」であり、私はこれに非常に自信を持っています。
$.fn.dataTableExt.oSort['scientific-desc'] = function(a,b) {
var x = a.replace(/^[<>]/g,"");
var y = b.replace(/^[<>]/g,"");
x = parseFloat(x);
y = parseFloat(y);
return ((x < y) ? 1 : ((x > y) ? -1 : 0));
}
そして、私は同様に「上昇関数」を定義しました:
$.fn.dataTableExt.oSort['scientific-asc'] = function(a,b) {
var x = a.replace(/^[<>]/g,"");
var y = b.replace(/^[<>]/g,"");
x = parseFloat(x);
y = parseFloat(y);
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}
私は初期化コードのほぼすべてと上記の並べ替え関数で遊んだことがありますが、テーブルで正しく並べ替える数値を取得できるものはないようです。1E-8未満の数字は常に一緒にとどまる傾向があるため、小文字の「e」が付いている数字も一緒になります。
dataTableを初期化するコードは次のとおりです。これはAJAX呼び出しの内部で呼び出されるコードであることに注意してください。
$.get('xyz.json',
function(data) {
// deal with json data
// get it ready for dataTable
// ...
$('.table').dataTable( {
"sScrollY": "200px",
"aoColumns": [
null,
null,
{"bSortable": true, "sType": "scientific"},
{"bSortable": false}
],
"aaSorting": [ [2,'asc'] ],
"bPaginate": false,
"bFilter": false,
"iDisplayLength": 5,
"bRetrieve": true,
"bDestroy": true
} );
});