Подтвердить что ты не робот

Получить количество элементов с некоторым свойством в массиве

У меня есть массив объектов, как показано ниже.

$scope.students = [{'isSelected': true},
    {'isSelected': true},
    {'isSelected': false},
    {'isSelected': true},
    {'isSelected': true},
]

Как я могу получить элементы count, у которых свойство isSelected установлено на true?

UPDATE:

Проблема заключается в том, что $scope.students извлекается из REST api и просто циклически перебирает переменную $scope.students не работает, так как переменная undefined до тех пор, пока запрос не будет завершен, и поэтому код цикла будет ошибочным, говоря $scope.students is not defined.

Я попытался использовать $watch, но в этом случае я должен определить цикл под директивой watch, и он работает только один раз, когда определяется $scope.students, после чего цикл не работает как $scope.students сам не меняется.

4b9b3361

Ответ 1

Вы можете добавить следующий контроллер к контроллеру. Переменная selectedStudentsCount в вашей области будет содержать число всех выбранных учеников (где isSelected установлено на true).

Функция подсчета выбранных пользователей в angular.forEach будет выполняться, только если students не пуст. В противном случае для пустой students переменная selectedStudentsCount вернет 0.

$scope.selectedStudentsCount = function() {
    var count = 0;
    angular.forEach($scope.students, function(student){
        count += student.isSelected ? 1 : 0;
    });
    return count; 
}

Обратите внимание, что selectedStudentsCount - это функция, поэтому ее необходимо вызвать с помощью () в вашем шаблоне, например.

<h2>Total selected students: {{selectedStudentsCount()}}</h2>

Ответ 2

Существует еще один способ: фильтры AngularJS. Вы можете написать это:

var selectedCount = $filter('filter')($scope.students, { isSelected: true }).length;