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

IT技术 javascript angularjs
2021-03-15 02:45:14

我有一个对象数组如下。

$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.students 本身没有改变。

3个回答

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

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

您还可以使用 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;
}
+1 如果你买得起 ES6,你可能想像酷孩子一样使用箭头函数 return $scope.students.filter((obj) => obj.isSelected).length;
2021-04-26 02:45:14
这与 AngularJS 过滤器相比有什么优势(除了在没有 AngularJS 的情况下可用,这个问题不是关于)?为什么使用这个而不是 AngularJS 过滤器?
2021-04-30 02:45:14
没有主要优势,只是使用标准 js 的替代方案。
2021-05-03 02:45:14

您可以将以下方法添加到您的控制器中。selectedStudentsCount您范围内的变量将保留所有选定学生的数量isSelected设置为true)。

只有当不为空时才会执行统计选定用户的函数否则为变量将返回angular.forEachstudents studentsselectedStudentsCount0

$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>
谢谢,我做了一些非常相似的事情,而不是返回计数,我将所选学生的总数更新为函数内的 var。并通过 ng-click 使用该方法。再次感谢。
2021-05-10 02:45:14
即使在模板视图中,也不要忘记函数调用括号后的分号!
2021-05-12 02:45:14