javascript - 如何使用比较器对 ag 网格中的数字进行排序
问题描述
我一直在尝试几个小时来解决数值排序的问题。它正确排序升序和正确降序。如果它有 null 它没有正确排序。就像如果有 1,2,3,null 用于上升它就像 1,2,3,null.Here 我需要 null 在第一个位置。对于降序,它就像 3,2,1,null 是正确的。
期待上升的空值,1,2,3,4。实际是 1,2,3,4,null
function nullsLastonSortNumber(val1, val2, node1, node2, isInverted) {
var isNullFirst = document.getElementById('{!$Component.pageId.oneValue}').innerHTML;
var currentSort= gridOptions.api.getSortModel();
if(isNullFirst=='false'){
if(currentSort[0].sort === 'asc'){
if (val1 === null && val2 === null) {
return 0;
}
if(val1 === null) {
return -1;
}
if (val2 === null) {
return 1;
}
}
else if(currentSort[0].sort === 'desc'){
if (val1 === null && val2 === null)
{
return 0;
}
if (val1 === null) {
return -1;
}
if (val2 === null) {
return 1;
}
}
return val1 - val2;
}
解决方案
如果您需要先使用空值进行升序排序,您可以执行以下操作:
var arr = [1,2,3,null];
arr.sort((a, b) => a-b);
这将导致[null, 1, 2, 3]
和下降:
arr.sort((a, b) => b-a);
这导致 [3, 2, 1, null]
因此,您可以将方法重写为:
function nullsLastonSortNumber(val1, val2, nodeA, nodeB, isInverted) {
val1 = val1 || -Number.MAX_VALUE;
val2 = val2 || -Number.MAX_VALUE;
var currentSort = gridOptions.api.getSortModel();
if(currentSort[0].sort === 'desc'){
return val2 - val1
}
return val1 - val2;
}
推荐阅读
- r - 在ggplot2中添加自定义标签并勾选平铺图的分类y轴
- chart.js - Chart.js 不适用于 PDF 的 Pug 和 Node
- html - 使用 CSS 打印布局拉伸项目以填充页面
- reactjs - 我该如何解决 ?我收到此错误'TypeError:无法读取未定义的属性'map''我正在尝试从操作文件访问数据
- java - 未找到 JavaFX 模块
- c++ - C++ NeuralNetwork 类没有成员拓扑
- reactjs - React:将文本附加到 TextArea
- google-chrome - 由于 HSTS,chrome 不断重定向
- java - 如何在java中使两个随机生成的整数彼此可整除?
- javascript - Google Maps API 地图未显示