如何根据angular / javascript中的几个可能值过滤对象数组?

时间:2016-08-05 21:58:06

标签: javascript angularjs

我有以下代码:

$scope.a = true;
$scope.b = true;
$scope.c = true;

$scope.myData = [{att: 'a'},{att: 'b'},{att:'c'}  ]

过滤掉符合上述条件的所有对象的最佳方法是什么?

例如,现在我想要所有对象。 但是如果$scope.a = false,我只想输出第二和第三个对象。

2 个答案:

答案 0 :(得分:1)

看看下面的内容:

angular
  .module('test', [])
  .value('data', [{att: 'a'},{att: 'b'},{att:'c'}])
  .run(function($rootScope, data) {
  
    $rootScope.a = true;
    $rootScope.b = true;
    $rootScope.c = true;
    $rootScope.myData = data;
    
    $rootScope.update = function(value) {
      $rootScope[value] = !$rootScope[value];
      
      $rootScope.myData = data.filter((item) => $rootScope[item.att]);
    }
  })
.in {
  background: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<section ng-app="test">
  
  <button ng-class="{'in' : a}" ng-click="update('a')">a</button>
  <button ng-class="{'in' : b}" ng-click="update('b')">b</button>
  <button ng-class="{'in' : c}" ng-click="update('c')">c</button>

  
  <article ng-bind="myData | json"></article>
</section>

答案 1 :(得分:0)

您可以使用javascript数组filter功能,如下所示

$scope.a = true;
$scope.b = false;
$scope.c = true;

$scope.myData = [{
    att: 'a'
}, {
    att: 'b'
}, {
    att: 'c'
}];


var res = $scope.myData.filter(function(obj) {
    if ($scope[obj.att]) return obj;
});

console.log(res);