2017-05-02 3 views
1

で常にソートjavascript配列、null値ねえ、私はslickgridプラグインを使用していますし、そこに私は

function sorterNumeric(a, b) { 
     var x = (isNaN(a[sortcol]) || a[sortcol] === "" || a[sortcol] === null) ? -99e+10 : parseFloat(a[sortcol]); 
     var y = (isNaN(b[sortcol]) || b[sortcol] === "" || b[sortcol] === null) ? -99e+10 : parseFloat(b[sortcol]); 
     return sortdir * (x === y ? 0 : (x > y ? 1 : -1)); 
    } 

順にデータをソートする機能sortNumericを持っていることは、誰かがそうNULL値が常に来て、このソートを拡張するために私を助けることができます最後の場所。

+3

を、同様のデータを追加してください。 –

+0

"always"とは、 "sortdir'に関係なく"という意味ですか? – Bergi

+0

'-99e + 10'(これはあなたが想像できる最小の数字かもしれません)の代わりに、' -Infinity'を使うべきです。 – Bergi

答えて

3

比較結果を必要なデルタの値として使用できます。

SlickGridでは、並べ替えの対象となるcolsのプロパティsortAscでソート順を取得します。ソート方向に沿ってクロージャーを使用してください。

function sortFn(sortAsc) { 
 
    return function (a, b) { 
 
     return (a[sortcol] === null) - (b[sortcol] === null) || (sortAsc || -1) * (a[sortcol] - b[sortcol]); 
 
    } 
 
} 
 

 
var array = [{ a: 1 }, { a: 3 }, { a: 2 }, { a: 8 }, { a: null }, { a: 42 }, { a: null }], 
 
    sortcol = 'a'; 
 

 
array.sort(sortFn(true)); // asc 
 
console.log(array); 
 

 
array.sort(sortFn(false)); // desc 
 
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

ニース!プレーンなJavaScriptを備えたとてもエレガントなソリューションです。 – cezar

+0

slickgridプラグイン関数 – vladimirProp

+0

ですが、ascまたはdescをソートする関数が1つありますので、私の関数を上書きするのに役立ちますか? – vladimirProp

0

次のコードを使用することができます

var sortcol = "num"; 
var sortdir = -1; 

function sorterNumeric(a, b) { 
    var x = (isNaN(a[sortcol]) || !a[sortcol]) ? 99e+10 * sortdir : parseFloat(a[sortcol]); 
    var y = (isNaN(b[sortcol]) || !b[sortcol]) ? 99e+10 * sortdir : parseFloat(b[sortcol]); 
    return x > y ? 1 * sortdir : -1 * sortdir; 
} 

var arr = [{ num: 1 }, { num: 3 }, { num: null }, { num: 7 }, { num: 2 } ] 
+0

これは正しいソリューションのチェックになります – vladimirProp

+0

['return 0'を忘れないでください](http://stackoverflow.com/q/20883421/1048572)! – Bergi

+0

ここで0を返す – vladimirProp