我正在尝试通过angularjs应用程序的属性对javascript对象数组进行排序。我需要能够按数字和字符串排序。
到目前为止,我已将this thread中提供的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;
}
}
});
答案 0 :(得分:1)
非常直截了当地检查出来:http://jsbin.com/duzurazo/2/edit
你可以使用像
这样的东西 <li ng-repeat="prop in props | orderBy:'order.v'"> {{prop.order.v}} </li>
其中model类似于
$scope.props = [{order:{v:"1"}},{order:{v:"5"}},{order:{v:"2"}}];