基于特定属性对JSON进行排序/过滤

时间:2015-07-22 14:00:33

标签: javascript json angularjs

所以我从API得到了这个回复。 我想从所有类型构建一个选择框,如何在不使用循环的情况下从此JSON中仅提取与 skill_level 相关的JSON。

[
  {
    "id": 32,
    "name": "Beginner",
    "type": "skill_level"
  },
  {
    "id": 33,
    "name": "Intermediate",
    "type": "skill_level"
  },
  {
    "id": 34,
    "name": "Experienced",
    "type": "skill_level"
  },
  {
    "id": 35,
    "name": "Professional",
    "type": "skill_level"
  },
  {
    "id": 36,
    "name": "Expert",
    "type": "skill_level"
  },
  {
    "id": 37,
    "name": "Male",
    "type": "sex"
  },
  {
    "id": 38,
    "name": "Female",
    "type": "sex"
  },
  {
    "id": 39,
    "name": "Single",
    "type": "marital_status"
  },
  {
    "id": 40,
    "name": "Married",
    "type": "marital_status"
  },
  {
    "id": 41,
    "name": "Divorced",
    "type": "marital_status"
  },
  {
    "id": 42,
    "name": "Not Wish To Say",
    "type": "marital_status"
  }
]

3 个答案:

答案 0 :(得分:3)

结帐Array.prototype.filter

var skillLevels = data.filter(function(item) {
    return item.type === 'skill_level';
});

从文档中,这可以如下工作:

  

filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。

假设data引用您在问题中提供的数组,这将导致skillLevels成为一个新数组,其中包含item.type等于{{1}的所有项目}}

答案 1 :(得分:1)

您可以使用lodash执行此操作:

$scope.data = ...;
$scope.filtered = _.filter($scope.data, { 'type': 'skill_level' });

这将只返回skill_level的{​​{1}}对象。

答案 2 :(得分:0)

我只是想到你也可以在AngularJs中这样做:

<select id="sex" name="sex" ng-model="sex">
    <option ng-repeat="option in $scope.data | filter:{type: 'sex'}" value="{{option.id}}">{{option.name}}</option>
</select>