2016-08-05 2 views
0

У меня есть следующий код:Как фильтровать массив объектов на основе нескольких возможных значений в угловом/javascript?

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

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

Что является лучшим способом, чтобы отфильтровать все объекты, которые соответствуют указанным выше критериям?

Например, прямо сейчас я хочу все объекты. Однако если $scope.a = false, я хочу вывести только 2-й и 3-й объекты.

ответ

0

Вы можете использовать функцию яваскрипта массив 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); 
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>

Смежные вопросы