2016-09-30 13 views
0

私は'100,000''200,000'などの2つの数値を比較し、その差を返すjavascriptでコンパレータ関数を書こうとしています。私は日付の列に、ここで提供「comparator」機能により、AG-グリッドの作り付けのカスタムの並べ替えでこれを使用する:Javascript関数は2千分のセパレータの数値を比較しない

function thousandsComparator(Num1, Num2) { 
    var Number1 = thousandsToComparableNumber(Num1); 
    var Number2 = thousandsToComparableNumber(Num2); 

    if (Number1===null && Number2===null) { 
     return 0; 
    } 
    if (Number1===null) { 
     return -1; 
    } 
    if (Number2===null) { 
     return 1; 
    } 

    return Number1 - Number2; 
} 

function thousandsToComparableNumber(num) { 
    var total = parseFloat(num.replace(/,/g, '')); 
    return total; 

} 

しかし、それは働いていない:https://www.ag-grid.com/javascript-grid-sorting/

私のコードは次のようです。それは列をソートしていません! - >{headerName: "ORDER Qty", field: "ORDER_QTY", width: 150, comparator: thousandsComparator, unSortIcon: true, cellStyle:{"text-align":"right"}},

列のデータは、この「10万」のようなものです「20万」など

+0

これはタイプミスです。 - >戻り値Number1 - 2Number2; – Keith

+0

は問題には関係しませんが、変数名は大文字で始めるべきではありません。 –

+0

コード全体を表示できますか?おそらくそれとjsfiddle?ありがとう – acontell

答えて

0

あなたのプランカを見ると、あなたはコンマを考慮に入れていないdateComparatorです。あなたはdate1, date2)dateComparatorの引数として使用しますが、その中にはdate1Number/date2Numberを使用してください。あなたがにdateComparatorを変更する必要が

function dateComparator(date1Number, date2Number) { 

    if (date1Number === null && date2Number === null) { 
     return 0; 
    } 
    if (date1Number === null) { 
     return -1; 
    } 
    if (date2Number === null) { 
     return 1; 
    } 

    return thousandsToComparableNumber(date1Number) - thousandsToComparableNumber(date2Number); 
} 

これはあなたの問題を解決しますが、よりよい解決策は、その生の状態でデータを残してseperatorsとしてコンマを持っているのcellRendererを使用することです。言い換えれば

、完全dateComparatorを削除し、あなたのcolDefに対して次があります。

{ 
    headerName: "ORDER Qty", 
    field: "ORDER_QTY", 
    width: 150, 
    cellStyle: { 
     "text-align": "right" 
    }, 
    cellRenderer: function (params) { 
     return Number(params.value).toLocaleString(); 
    } 
} 
+0

あなたのセルレンダリングされた答えに感謝します。それは最高です。これにtoFixed(2)を追加することも可能ですか?たぶんこれが好き? Number(params.value).toLocaleString()を返します。toFixed(2); – shek

+0

toLocaleStringは文字列を返すので、toFixedは数字のメソッドではないので失敗します。したがって、小数点以下2桁にしたい場合は、次のようにしてください:return Number(params.value).. toFixed(2).toLocaleString() –

0

あなたはあなたのコードのタイプミスを持っている、と私はあなたがnullsをサポートすることをお勧めしますthousandsToComparableNumber

function thousandsComparator(Num1, Num2) { 
    var Number1 = thousandsToComparableNumber(Num1); 
    var Number2 = thousandsToComparableNumber(Num2); 

    if (Number1===null && Number2===null) { 
     return 0; 
    } 
    if (Number1===null) { 
     return -1; 
    } 
    if (Number2===null) { 
     return 1; 
    } 

    return Number1 - Number2; // there was a typo --> return Number1 - 2Number2; 
} 

function thousandsToComparableNumber(num) { 

    if (num === null){ 
     return null; 
    } 

    var total = parseFloat(num.replace(/,/g, '')); 
    return total; 

} 
+0

これはここに貼り付けるタイプミスです。私のコードでは本当に1つです。 – shek

+0

nullを追加してもまだ動作しません。 – shek

0

おそらく、あなたは交換しようとする必要があります:

戻り値1 - 2Number2;

リターン番号1 - 数値2;

+0

ああ、それはここに貼り付けるタイプミスです。お詫び – shek

0

あなたはthousandsToComparableを呼び出す前にnull.replace()メソッドを持っていないため、nullをチェックする必要があるので、あなたはnullを変換しようとすると、それがエラーを取得します。

function thousandsComparator(Num1, Num2) { 

    if (Num1===Num2) { 
     return 0; 
    } 
    if (Num1===null) { 
     return -1; 
    } 
    if (Num2===null) { 
     return 1; 
    } 

    var Number1 = thousandsToComparableNumber(Num1); 
    var Number2 = thousandsToComparableNumber(Num2); 
    return Number1 - Number2; 
} 
関連する問題