示例JSON结构
{
"holding": [
{
"company": 1,
"employee": [
{ "id": 1, "name": "John"},
{ "id": 2, "name": "Michael"},
{ "id": 3, "name": "George"}
]
},
{
"company": 2,
"employee": [
{ "id": 1, "name": "Madonna"},
{ "id": 2, "name": "Harry"}
]
}
]
}
上面的结构在视图中可用
{{ holding }}
Holding有5名员工,如何在Angular中检测到这一点?有一个简单的方法吗?我在视图中需要这种可能性,例如
{{ holding.length }} // 2
我需要的是(PSEUDO CODE):
{{ length of all employees in holding }} // 5
如果可能的话:我需要一个仅查看解决方案,它不会修改控制器..
以下控制器解决方案(答案)可以正常工作。
答案 0 :(得分:1)
使用数组的Reduce功能。它需要一个为数组的每个元素调用的函数,取最后一次迭代的结果(我称之为count
,但它不必是数字结果)并且当前元素(company
,因为持有的每个元素代表一个公司)。函数后面的参数是可选的,用于指定count
的初始值,或者您正在使用的任何类型的元素。
var totalEmployees = parentObject.holding.reduce(function(count, company){
return +count + +company.employee.length;
}, 0);
您没有为包含holding
的对象提供名称,因此我只是将其称为parentObject
。
另一个好处是这是vanilla JS,因此即使Angular不可用也可以使用。
答案 1 :(得分:0)
使用angular.forEach
这是一个生成计数的简单选项。
angular.module('app', [])
.controller('myCtrl', function($scope) {
$scope.cnt=0;
$scope.hiArray = [];
$scope.myarr={
"holding": [
{
"company": 1,
"employee": [
{ "id": 1, "name": "John"},
{ "id": 2, "name": "Michael"},
{ "id": 3, "name": "George"}
]
},
{
"company": 2,
"employee": [
{ "id": 1, "name": "Madonna"},
{ "id": 2, "name": "Harry"}
]
}
]
};
$scope.onClick=function(){
var count=0;
var jsonObj = ($scope.myarr);
angular.forEach(jsonObj.holding, function(key) {
console.log(key);
if(key.hasOwnProperty('employee')){
count++;
}
});
alert('count of employee '+count);
$scope.cnt=count;
}
})
现在从视图中访问{{$scope.cnt}}
。