我有一个表,是由ngRepeat从变量第一。通过过滤器,而不是先。Id_second 它会写出second.name,效果很好。现在我要先对列进行排序。id_second,我希望它不是先按排序。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')"
And in controller
$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');
我不知道如何过滤来自另一个变量的属性。我想我应该写一个自定义过滤器,但到目前为止还没有成功。
任何想法?谢谢。
似乎没有办法简单地做到这一点,所以最后我编写了一个自定义orderBy函数,在该函数中实现了快速排序。
// 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));
}
当然,如果有人能够在不使用额外库的情况下将其拉出,这将使我不得不更改我已经使用的html过滤器和orderBy,这将是最受欢迎的:)