我有一个多个对象数组:
{
"option_12": {
"id": "0",
"name": "6 x 330ml",
"price": "0.00"
},
"option_14": {
"id": 1,
"name": "12 x 330ml",
"price": "2.00"
},
"option_17": {
"id": 1,
"name": "15 x 330ml",
"price": "4.00"
},
"option_10": {
"id": 1,
"name": "30 x 330ml",
"price": "1.00"
}
}
我正在使用AngularJS Filter orderBy尝试按价格值对对象进行排序。所以在这种情况下,option_12应该是第一个,option_10应该是第二个。
在控制器中:
$scope.pOptions = $filter('orderBy')($scope.pOptions, 'price');
在我看来,我使用ng-options填充选择选项:
<select ng-model="SelectedPOption" ng-options="option.name for option in pOptions|orderBy:'price'"></select>
答案 0 :(得分:1)
select
的标记很好。它是一个有一些问题的数组。
[]
filter
,因为你是从标记中调用它。示例:
$scope.pOptions = [{
id: "0",
name: "6 x 330ml",
price: 0.00
}, {
id: 1,
name: "12 x 330ml",
price: 2.00
}, {
id: 1,
name: "15 x 330ml",
price: 4.00
}, {
id: 1,
name: "30 x 330ml",
price: 1.00
}];
工作示例:https://plnkr.co/edit/n09iupr70zRX56kVrYK9?p=preview
编辑:由于数据来自后端API,您可以迭代对象键/属性并使用map将子对象投影到数组:
$scope.pOptions = Object.keys($scope.pOptions).map(function(k) {
var obj = $scope.pOptions[k];
obj.price = parseFloat(obj.price);
return obj;
});