Javascript 比较两个千位分隔符的函数不起作用
Javascript function to compare two thousands separator number not working
我正在尝试在 javascript 中编写一个比较器函数,它比较两个数字,如 '100,000'
、'200,000'
等,以及 returns 它们的差异。我想在 ag-grid 的内置自定义排序中使用它,按此处为日期列提供的“comparator
”功能进行排序:https://www.ag-grid.com/javascript-grid-sorting/
我的代码是这样的:
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;
}
但是,它不起作用。它不是对列进行排序! --> {headerName: "ORDER Qty", field: "ORDER_QTY", width: 150, comparator: thousandsComparator, unSortIcon: true, cellStyle:{"text-align":"right"}},
列数据是这样的"100,000", "200,000"等等
您的代码有错别字,建议您在thousandsToComparableNumber
中支持nulls
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;
}
也许,您应该尝试替换:
return 数字 1 - 2 数字 2;
与:
return 数字 1 - 数字 2;
您需要在调用 thousandsToComparable
之前检查 null
,因为 null
没有 .replace()
方法,所以当您尝试时会出错转换 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;
}
看看你的 plunker 你是 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);
}
这将解决您的问题,但更好的解决方案是将数据保留在其原始状态并使用 cellRenderer 以逗号作为分隔符。
换句话说,完全删除 dateComparator
,并为您的 colDef 添加以下内容:
{
headerName: "ORDER Qty",
field: "ORDER_QTY",
width: 150,
cellStyle: {
"text-align": "right"
},
cellRenderer: function (params) {
return Number(params.value).toLocaleString();
}
}
我正在尝试在 javascript 中编写一个比较器函数,它比较两个数字,如 '100,000'
、'200,000'
等,以及 returns 它们的差异。我想在 ag-grid 的内置自定义排序中使用它,按此处为日期列提供的“comparator
”功能进行排序:https://www.ag-grid.com/javascript-grid-sorting/
我的代码是这样的:
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;
}
但是,它不起作用。它不是对列进行排序! --> {headerName: "ORDER Qty", field: "ORDER_QTY", width: 150, comparator: thousandsComparator, unSortIcon: true, cellStyle:{"text-align":"right"}},
列数据是这样的"100,000", "200,000"等等
您的代码有错别字,建议您在thousandsToComparableNumber
nulls
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;
}
也许,您应该尝试替换:
return 数字 1 - 2 数字 2;
与:
return 数字 1 - 数字 2;
您需要在调用 thousandsToComparable
之前检查 null
,因为 null
没有 .replace()
方法,所以当您尝试时会出错转换 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;
}
看看你的 plunker 你是 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);
}
这将解决您的问题,但更好的解决方案是将数据保留在其原始状态并使用 cellRenderer 以逗号作为分隔符。
换句话说,完全删除 dateComparator
,并为您的 colDef 添加以下内容:
{
headerName: "ORDER Qty",
field: "ORDER_QTY",
width: 150,
cellStyle: {
"text-align": "right"
},
cellRenderer: function (params) {
return Number(params.value).toLocaleString();
}
}