Angular:检查数据中是否存在属性

时间:2015-04-19 18:02:48

标签: javascript arrays angularjs

我试图检查对象数组中是否存在某些数据,但遗憾的是我无法执行以下操作:

这是我控制器中的数据:

$scope.data = [{
      users:[
        {name: 'Stephen', age: 50, dev: 'js', car: 'red', shoes:'green', happy: 'true', videoGame:{isPlayer: 'true', console:'PS3'}},
        {name: 'Stephen', age: 28, dev: 'angular', car: 'gold', shoes:'silver', happy: 'true', videoGame:{isPlayer: 'false', console:'none'}},
        {name: 'Adam', age: 43, dev: 'php', car: 'blue', shoes:'yellow', happy: 'true', videoGame:{isPlayer: 'true', console:'XBOX'}},
        {name: 'John', age: 27, dev: 'java', car: 'green', shoes:'black', happy: 'true', videoGame:{isPlayer: 'true', console:'PC'}},
        {name: 'Steve', age: 29, dev: 'ruby', car: 'white', shoes:'blue', happy: 'true', videoGame:{isPlayer: 'false', console:'none'}},
        {name: 'Pablo', age: 34, dev: 'java', car: 'pink', shoes:'red', happy: 'false', videoGame:{isPlayer: 'true', console:'GAMEBOY'}}
      ],
      futureUsers:[
        {name: 'Walter', age: 56, dev: 'js', car: 'red', shoes:'green', happy: 'true'},
        {name: 'Jessi', age: 27, dev: 'angular', car: 'gold', shoes:'silver', happy: 'true'},
        {name: 'Arnold', age: 34, dev: 'php', car: 'blue', shoes:'yellow', happy: 'true'},
        {name: 'Bill', age: 67, dev: 'java', car: 'green', shoes:'black', happy: 'true'},
        {name: 'Josh', age: 21, dev: 'ruby', car: 'white', shoes:'blue', happy: 'true'},
        {name: 'Sam', age: 31, dev: 'java', car: 'pink', shoes:'red', happy: 'false'}
      ]
    }];

如果属性 videoGame 存在,我试图检入 futureUsers 。如果没有,我尝试按照与用户中相同的方式为每个用户添加此内容:

$scope.checkData = function(dataTocheck){
      angular.forEach(dataTocheck, function(){
        if(!dataTocheck.hasOwnProperty('videoGame')){
          var newProperty = {videoGame:{isPlayer: 'true', console:'none'}};
          $scope.dataTocheck.push(newProperty)
          return $scope.dataTocheck;
        }
      })
    };

    $scope.checkData($scope.data.futureUsers);

这是一个关于plunkr的链接: http://plnkr.co/edit/G0C2l7Ko9kffnemtJiew?p=preview

1 个答案:

答案 0 :(得分:3)

我已经修好了。在plunker中尝试。

我在您的代码中发现了一些错误。用于更新 futureUsers 的函数 checkData 不正确(您没有通过对象在forEach函数中对其进行迭代,并且您之后使用了 return 每次迭代)。

$scope.checkData = function(futureUsers){
  angular.forEach(futureUsers, function(futureUser){
    if(!futureUser.hasOwnProperty('videoGame')){
      futureUser.videoGame= {isPlayer: 'true', console:'none'}
    }
  })
};

Check documentation about forEach loop

我认为你的 $ scope.data 变量必须是一个对象,而不是数组。因此,表格标签中的ng-repeat指令是不必要的。