AngularJS筛选排序依据,由另一订购一个变量(AngularJS filter orderBy

2019-09-25 17:34发布

我有一个由ngRepeat从变量做出第一的表。 通过过滤器,而不是first.id_second它写出second.name,和它的伟大工程。 现在,我想排序的列first.id_second,我希望它不会被first.id_second进行排序,而是由second.name。 这是我的结构:

var first = [{ 
    "id": 0,
    "id_second": "111"
},{
    "id": 1,
    "id_second": "222"
}]

var second = [{
    "id_second": "111",
    "name": "name1"
},{
    "id_second": "222",
    "name": "name2"
}]

通常情况下,在我的HTML我会

ng-click="order('col_name')"

而在控制器

$scope.order = function(predicate) {
    $scope.predicate = predicate;
    $scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;
    $scope.first = orderBy($scope.first, predicate, $scope.reverse);
 };

var orderBy = $filter('orderBy');

我不知道如何通过从另一个变量属性过滤。 我想我应该写一个自定义过滤器,但到目前为止,并没有一点succesfull。

有任何想法吗? 感谢名单。

Answer 1:

这似乎是没有办法做到这一点简单的,所以最后我写在我实现了快速排序的自定义排序依据的功能。

// arranging data from second to get to the data easier
var secondKeyVal = {};
for (var i = 0; i < $scope.second.length; i++) {
    secondKeyVal[$scope.second[i].id_second] = $scope.second[i].naziv;
}

// function that is called from html
$scope.orderByCustom = function(predicate) {
    $scope.predicate = predicate;
    $scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;
    $scope.orderByCustomSort();
};

$scope.orderByCustomSort= function() {
    var sorted = quickSort($scope.first);
    $scope.first = sorted;
};

function quickSort(a) {
    if (a.length <= 1) return a;
    var left=[], right=[], pivot=secondKeyVal[a[0].id_second];
    for (var i = 1; i < a.length; i++) {
        secondKeyVal[a[i].id_second] <= pivot ? left.push(a[i]) : right.push(a[i]);
    }

    return quickSort(left).concat(a[0], quickSort(right));
}

Ofcourse,如果有人设法拉了这一点,而无需使用额外的库,这将使我不得不改变HTML过滤器和排序依据我已经使用了,这将是最欢迎:)



文章来源: AngularJS filter orderBy, ordering one variable by another