angular controller语言 - $filter sortBy integer



我的数据被排序为字符串:

ID          Name
1122162089  John McGill
1461        Cynthia Salazar
22925       Sylvan Knutsen
24930       Amrit Advani

我需要将其排序为数字

var sortedData = function (records,optionsData) {
    var sortField = optionsData.sort[0].field;
    var sortDir = optionsData.sort[0].dir !== "asc";
    var tempRecords = $filter('orderBy')(records, sortField, sortDir);
    return tempRecords;
}

其中

sortField = "ID" and sortDir = "asc"

尚未弄清楚如何在控制器中编写自定义过滤条件

奇怪的是数据中的ID是数字的:

[{
    ID: 1122162089,
    Name: "John McGill"
},{
    ID: 1461,
    Name: "Cynthia Salazar"
}]

您的数据被排序为字符串,这很可能是因为ID是字符串。您可以将自定义比较器添加到$过滤器中以处理字符串ID。另外,您可以通过将OrderByFilter注入您的控制器来访问Orderby过滤器:

.controller('MyCtrl', ['$scope', 'orderByFilter', function($scope, orderBy) 

然后,您可以使用这样的OrderByFilter使用自定义比较器对数据进行排序:

var sortedData = function(records, optionsData) {
    var sortField = optionsData.sort[0].field;
    var sortDir = optionsData.sort[0].dir !== "asc";
    var tempRecords = orderBy(records, sortField, sortDir, function(val1, val2) {
        var v1 = parseInt(val1.value);
        var v2 = parseInt(val2.value);
        if (v1 === v2) {
            return 0;
        } else {
            return v1 < v2 ? -1 : 1;
        }
    });
    return tempRecords;
};

在我的情况下,我在表中使用订单,请查看此示例。您必须将要订购的元素放在"表达"中,而"反向"是如何显示,上升或减少的数据,以减少和false的升级。

<tr ng-repeat="obj in usuarios | orderBy : expression : reverse">
</tr>

如果字符串的问题保留,请尝试使用parseint()。

最新更新