获取具有数组中某些属性的项的计数

时间:2013-03-12 11:44:26

标签: javascript angularjs

我有一个对象数组如下。

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

如何获取isSelected属性设置为true的计数项?

更新

问题是$scope.students是从REST api中获取的,只是循环遍历$ scope.students变量,因为变量是undefined不起作用,直到请求完成,因此循环代码错误地说$scope.students is not defined

我尝试使用$watch但是在这种情况下我必须在watch指令下定义循环,并且只有在定义$ scope.students时才会工作一次,之后循环不能用作$ scope。学生本身并没有改变。

3 个答案:

答案 0 :(得分:27)

还有另一种方法:AngularJS过滤器。 你可以这样写:

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

答案 1 :(得分:16)

您可以将以下方法添加到控制器中。范围中的变量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 :(得分:16)

您还可以使用javascript过滤方法(请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

$scope.selectedStudentsCount = function() {
  return $scope.students.filter(function(obj){return obj.isSelected}).length;
}