按属性排序数组中的javascript对象(angularjs过滤器)
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>
其中model类似于
$scope.props = [{order:{v:"1"}},{order:{v:"5"}},{order:{v:"2"}}];
相关文章:
- AngularJs指令,该指令创建内部有数据对象的新指令
- AngularJS&JSON-从Previous&下一个对象
- 遍历AngularJs中的对象
- Angularjs:空对象,当只有一次点击时
- Javascript/AngularJs-如何用另一个数组中的对象填充数组
- AngularJS:如何用同一对象的另一个属性访问一个属性
- 在禁用ng的情况下搜索JSON对象(AngularJS)
- 将数据推送到对象angularjs
- 将第二个或多个数组推送到数组对象 AngularJS 中
- 用于对象AngularJs中包含的所有字段和数组的deepCopy
- 对于返回 1 个对象 Angularjs
- 使用内部数组遍历数组并创建新对象 - AngularJS
- 向json对象angularjs添加一个数组
- 如何删除数组中使用过滤器的对象?AngularJS
- 如何将密钥分配给对象Angularjs
- 将数据推送到对象AngularJS中
- 在导入的JSON对象AngularJS中获取一个数组
- 返回$rootScope函数中的对象(AngularJS)
- 如何遍历这个 Json 对象(angularJS)
- 按属性排序数组中的javascript对象(angularjs过滤器)