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

标签 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 应该是第二个。

在 Controller 中:

$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

最佳答案

您的 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 一样到达,您可以迭代对象键/属性并使用映射将子对象投影到数组:

$scope.pOptions = Object.keys($scope.pOptions).map(function(k) {
   var obj = $scope.pOptions[k];
   obj.price = parseFloat(obj.price);
   return obj;
});

关于javascript - AngularJS 使用对象属性对多个对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36731636/

相关文章:

javascript - 将当前元素传递给 ng-repeat 中的自定义过滤器

javascript - 使用 Angular 和 TypeScript 构建 WebExtension

android - ngCordova LocalNotification 插件

javascript - 类型 'FirebaseApp' 中缺少“性能”

javascript - 想要检查用户是否已经存在 MongoDB

javascript - 如何使用 jquery 创建类似 sevenly.org 的设计

javascript - javascript ES6 中的这个匿名 block 是什么?

javascript - 如何使用 jQuery 在所有 Ajax 请求完成后执行操作

angularjs - 使用 Angular 日期过滤器如何从 MM/DD/YYYY 格式的日期获取星期几?

javascript - 与 ng-pattern 一起使用时,有效的正则表达式模式会引发错误吗?