[英]Sorting javascript objects in array by properties (angularjs filter)
我正在嘗試按angularjs應用程序的屬性對javascript對象數組進行排序。 我需要能夠按數字和字符串排序。
到目前為止,我已經擴展了該線程中提供的Armin的篩選器,以對數字和字符串進行排序(請參見下面的代碼)。
我仍然缺少的是將嵌套屬性(如user.surname
)賦予過濾器的功能。 它應該是動態的,這樣我就可以為其提供任何深度的嵌套屬性。 有沒有辦法做到這一點?
這是我的過濾器代碼:
angular.module('app')
.filter('orderObjectBy', function(){
return function(input, filterBy) {
if (!angular.isObject(input)) return input;
var attribute = filterBy;
var reverse = false;
if (filterBy.substr(0,1) == '-') {
attribute = filterBy.substr(1);
reverse = true;
}
var array = [];
for(var objectKey in input) {
array.push(input[objectKey]);
}
if (parseInt(array[0][attribute])) {
array.sort(function(a, b){
a = parseInt(a[attribute]);
b = parseInt(b[attribute]);
return a - b;
});
} else {
array.sort(function (a,b) {
if (a[attribute] < b[attribute]) {
return -1;
} else if (a[attribute] > b[attribute]) {
return 1;
} else {
return 0;
}
});
}
if (reverse) {
return array.reverse();
} else {
return array;
}
}
});
它很簡單直接檢查一下: http : //jsbin.com/duzurazo/2/edit
您可以使用類似
<li ng-repeat="prop in props | orderBy:'order.v'"> {{prop.order.v}} </li>
那里的模型就像
$scope.props = [{order:{v:"1"}},{order:{v:"5"}},{order:{v:"2"}}];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.