根据特定属性和值过滤JSON数据

时间:2015-10-27 10:02:18

标签: javascript json angularjs

我有以下JSON对象:

{
  'name' : 'John',
  'friends' : [
    {
      'id' : 1,
      'name' : 'George',
      'level' : 10
    },
    {
      'id' : 2,
      'name' : 'Stacy',
      'level' : 8
    },
    {
      'id' : 3,
      'name' : 'Fred',
      'level' : 10
    },
    {
      'id' : 4,
      'name' : 'Amy',
      'level' : 7
    },
    {
      'id' : 5,
      'name' : 'Bob',
      'level' : 10
    }
  ]
}

正如您所看到的,您有一个具有name的对象(person?)和一个friend个对象的数组。每个朋友对象都有idnamelevel

我想做的是从该数组中选择所有10级朋友,并选择另一个名为var level10Friends的变量/对象。

我正在使用AngularJS,所有这些都需要在我的控制器中进行,但这不一定是AngularJS特定的问题,欢迎使用vanilla JavaScript函数。

说实话,我甚至不知道这是否可行,搜索网络似乎没有带来任何类似的东西......

5 个答案:

答案 0 :(得分:16)

  

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

var users = {
  'name': 'John',
  'friends': [{
    'id': 1,
    'name': 'George',
    'level': 10
  }, {
    'id': 2,
    'name': 'Stacy',
    'level': 8
  }, {
    'id': 3,
    'name': 'Fred',
    'level': 10
  }, {
    'id': 4,
    'name': 'Amy',
    'level': 7
  }, {
    'id': 5,
    'name': 'Bob',
    'level': 10
  }]
};
var wantedData = users.friends.filter(function(i) {
  return i.level === 10;
});
console.log(wantedData);

答案 1 :(得分:1)

试试这个:

var level10friends = list.friends.filter(function(p){return p.level == 10;});

答案 2 :(得分:1)

使用箭头功能,您可以执行以下操作:

table1_amount table2_amount
22 22
22 22
22 NULL

答案 3 :(得分:0)

今天早上刚发现这个插件 http://linqjs.codeplex.com/

它是一种使用linq函数查询JSON的方法。 我喜欢它^^

编辑:

您的案例的小例子:

var jsonArray = {your-json-array}
var level10Friends = Enumerable.From(jsonArray)
    .Where("$.user.level == 10")
    .Select("$.user.name")
    .ToArray();

答案 4 :(得分:0)

看看!

angular
  .module('test', [])
  .value('user', {
  'name' : 'John',
  'friends' : [{
      'id' : 1,
      'name' : 'George',
      'level' : 10
    },
    {
      'id' : 2,
      'name' : 'Stacy',
      'level' : 8
    },
    {
      'id' : 3,
      'name' : 'Fred',
      'level' : 10
    },
    {
      'id' : 4,
      'name' : 'Amy',
      'level' : 7
    },
    {
      'id' : 5,
      'name' : 'Bob',
      'level' : 10
    }]
  })
  .controller('TestCtrl', function TestCtrl($scope, user) {
    var vm = $scope;
    vm.level10friends = (function(friends, REQUIRED_LEVEL) {
      var res = [];
      
      for(var friend, i = 0, len = friends.length; i < len; i++) {
        friend = friends[i];
        
        if(friend.level === REQUIRED_LEVEL) {
          res.push(friend);
        }
        
      }
      
      return res;
    }).call(this, user.friends || [], 10);
  })
;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<article ng-app="test">
  <div ng-controller="TestCtrl">
    <div ng-bind="level10friends | json"></div>
  </div>  
</article>