我在我的应用上使用了Kendo和Typescript,我无法弄清楚如何使用代表ipv4地址的字符串对行进行排序
排序必须如下所示
1.1.1.1
10.1.1.1
50.1.1.1
100.1.1.1
100.2.1.1
255.255.255.255
在gridColumns中我尝试过这样的事情:
{
field: "sourceIP",
title: this.$filter('translate')('tcMetadata.modules.widgets.tcConnectionsGrid.gridHeaders.sourceIP'),
type:"string",
sortable: {
compare: function(a,b){
var arr = [that.ipaddressregex(a.sourceIP), that.ipaddressregex(b.sourceIP)];
arr = arr.sort();
console.log(arr, "ARRRRRRRRRRRRRRRRRR");
return arr[0];
}
}
}
其中.ipaddressregex函数是:
public ipaddressregex(ip) {
ip = ip.split(".").map( function(i) {
return ("00"+i).slice(-3);
}).join(".");
ip = ip.replace(/\./g, "");
return ip;
}
该函数只是在空字段中添加零并删除点
12.10.1.1
已转换为012010001001
然后javascript sort()
方法会照顾
但我认为我的问题出在我return
return arr[0];
答案 0 :(得分:1)
您的比较函数应该返回如下伪代码中的值:
function compare(a, b, descending) {
if (a is less than b by some ordering criterion) {
return -1;
}
if (a is greater than b by the ordering criterion) {
return 1;
}
// a must be equal to b
return 0;
}
http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#configuration-columns.sortable.compare
用于比较值的JavaScript函数。它与Array.sort接受的比较函数具有相同的签名。
一个值得注意的例外是我们还提供了第三个参数来指示排序方向(降序时为true)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort