JSON中的长度检测(嵌套结构) - 角度视图

时间:2015-12-16 15:26:01

标签: angularjs json

示例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

如果可能的话:我需要一个仅查看解决方案,它不会修改控制器..

以下控制器解决方案(答案)可以正常工作。

2 个答案:

答案 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}}