2016-09-30 2 views
0

Ich versuche, eine Komparatorfunktion in Javascript zu schreiben, die zwei Zahlen wie '100,000', '200,000' usw. vergleicht und ihre Differenz zurückgibt. Ich will das netz ag in der Sortier eingebauten Brauch verwenden, die von ‚comparator‘ -Funktionalität hier für die Spalte Datum versehen: https://www.ag-grid.com/javascript-grid-sorting/Javascript-Funktion zum Vergleich zwei tausend Trennzeichen Nummer funktioniert nicht

Mein Code ist wie folgt:

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; 

} 

Aber es funktioniert nicht. Es sortiert die Spalte nicht! ->{headerName: "ORDER Qty", field: "ORDER_QTY", width: 150, comparator: thousandsComparator, unSortIcon: true, cellStyle:{"text-align":"right"}},

Die Spaltendaten ist wie dieser "100.000", "200000" usw.

+0

Ist das ein Tippfehler. -> return Nummer1 - 2Nummer2; – Keith

+0

nicht mit dem Problem verbunden, aber Sie sollten Ihren Variablennamen nicht durch einen Großbuchstaben beginnen. –

+0

könnten Sie uns Ihren vollständigen Code zeigen? Vielleicht ein Problem damit? Danke – acontell

Antwort

0

an Ihrem Plunker Suchen Sie sind dateComparator, die, wie es steht Komma berücksichtigt nicht statt. Sie haben date1, date2) als Argumente zu dateComparator, aber verwenden Sie date1Number/date2Number innerhalb.

Sie müssen dateComparator ändern:

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); 
} 

Dies wird Ihr Problem zu beheben, aber eine bessere Lösung wäre es, die Daten im Rohzustand zu verlassen und einen cellrenderer verwenden Kommas als seperators zu haben. die folgenden für Ihre COLDEF

Mit anderen Worten, entfernen Sie die insgesamt dateComparator und haben:

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

Vielen Dank für Ihre CellRendered Antwort. Das ist perfekt. Ist es auch möglich, ToFixed (2) hinzuzufügen? Vielleicht so? Rückgabewert (params.value) .toLocaleString().zuFixed (2); – shek

+0

Da toLocaleString eine Zeichenfolge zurückgibt, wird toFixed fehlschlagen, da dies keine Methode für eine Zahl ist. Wenn Sie also 2 Dezimalstellen verwenden möchten, versuchen Sie Folgendes: return Anzahl (params.value) .. toFixed (2) .toLocaleString() –

0

Sie haben einen Tippfehler in Ihrem Code, und ich empfehle Ihnen nulls zur Unterstützung in 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

Das war ein Schreibfehler Kopieren hier einfügen. Nicht wirklich eins in meinem Code. – shek

+0

Immer noch nicht funktioniert nach dem Hinzufügen von null – shek

0

Vielleicht sollten Sie versuchen, zu ersetzen:

Rückgabe Nummer1 - 2Number2;

mit:

Rückkehr Number1 - Number2;

+0

Oh, das ist ein Tippfehler Kopieren hier einfügen. Entschuldigungen – shek

0

Sie müssen sich für null überprüfen, bevor Sie thousandsToComparable nennen, weil null keine .replace() Methode hat, so wird es einen Fehler, wenn Sie versuchen, null zu konvertieren.

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; 
} 
Verwandte Themen