如何在Kendo UI Grid中对IP地址行进行排序

时间:2016-08-25 12:29:24

标签: kendo-ui kendo-grid

我在我的应用上使用了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];

1 个答案:

答案 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