1

我有一个teamDetails数组,其中是一个squad数组,其中是player对象。每个玩家对象都有一个injured包含值"true"or的属性"false"

我想编写一个循环遍历数组的函数,只返回受伤属性评估为真的玩家。

这是我到目前为止(不工作):

$scope.injuredPlayerSearch = function() {
  var injuredPlayers = [];

  $scope.teamDetails.squad.forEach(function(o) {
      if (o[injured] === true) {
        injuredPlayers.push(o)
      }
    });

  return injuredPlayers;
}

我看不出这有什么问题。如果有人可以,将不胜感激。

4

6 回答 6

1

您不需要编写任何函数。角度为您服务。

var injuredPlayers = $filter('filter')($scope.teamDetails.squad, {injured:true}, true);

这里 $filter 是角度过滤器。将依赖注入到您正在使用的控制器或服务中。

有关角度过滤器的更多信息,请参阅此处

注意:第二个 true 用于严格的类型检查。它相当于 injured===true

编辑

对于直接在视图角度显示它有更好的解决方案。

{{teamDetails.squad | filter:{injured:true}:true}}

在视图中使用不需要任何依赖注入或控制器。

于 2016-05-27T08:57:35.397 回答
0

如果迭代在一个范围内,array of array这是正确的实现:

$scope.injuredPlayerSearch = function() {
  var injuredPlayers = [];

  $scope.teamDetails.forEach(function(t){
    t.squad.forEach(function(o) {
      if (o[injured] === true) {
        injuredPlayers.push(o)
      }
    });
  });

  return injuredPlayers;
}
于 2016-05-27T08:30:37.213 回答
0

您可以filter用来返回受伤的球员:

$scope.injuredPlayerSearch = function() {
    return $scope.teamDetails.squad.filter(function(o) {
        return o[injured];
    });
}
于 2016-05-27T08:30:52.920 回答
0

使用 javascript过滤器

  var players = [{ id : 0 , injured : true},
                { id : 1 , injured : false},
                { id : 2 , injured : false},
                { id : 3 , injured : true},
                { id : 4 , injured : true}];

  var injuredPlayers = players.filter(filterByInjured)

  function filterByInjured(player) {
      if ('injured' in player && typeof(player.injured) === 'boolean' && player.injured === true) {
          return true;
      }
  }

  console.log(injuredPlayers);
于 2016-05-27T08:40:21.107 回答
0

你做的一切都是正确的,只是留下了一些东西

$scope.injuredPlayerSearch = function() {
     var injuredPlayers = [];

     angular.forEach($scope.teamDetails.squad,function(o) {
          if (o[injured] === true) {
                 injuredPlayers.push(o)
          }
     });

     return injuredPlayers;
}
于 2016-05-27T09:40:35.260 回答
0

尝试这个

   var injuredPlayers = [];
  angular.forEach($scope.teamDetails.squad,function(s){
     if (s.injured === true) {
      injuredPlayers.push(s)
     }
  })
 return injuredPlayers;
于 2016-05-27T08:33:55.497 回答