AngularJS使用object属性对多个对象数组进行排序

时间:2016-04-20 00:13:45

标签: javascript angularjs ionic-framework

我有一个多个对象数组:

{
   "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>

这些都没有任何影响。 https://docs.angularjs.org/api/ng/filter/orderBy

1 个答案:

答案 0 :(得分:1)

select的标记很好。它是一个有一些问题的数组。

  • 不要在js中使用引号。
  • 价格应该是数字才能正确排序
  • 使用[]
  • 封闭数组的所有元素
  • 不要从js中拨打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;
});