2014-10-01 81 views
12

我需要通過嵌套的JSON數組看起來像迭代通過角控制器嵌套的JSON數組,並得到唯一值

[ 
    { 
    "title": "EPAM", 
    "technologies": [ 
     "PHP", 
     ".net", 
     "Java", 
     "Mobile", 
     "Objective-C", 
     "Python", 
     "Ruby" 
    ], 
    "location": "Belarus", 
    "city": "Minsk" 
    }, 
    { 
    "title": "Parallels", 
    "technologies": [ 
     "PHP", 
     "Java", 
     "C++", 
     "iOS Development", 
     "C#", 
     "Ember.js" 
    ], 
    "location": "Russia", 
    "city": "Moscow" 
    } 
] 

我要的是通過技術列表中的每個公司,然後返回到循環迭代一個唯一值列表。但是,我失敗了,無法訪問控制器中公司陣列中的單個公司。它看起來像這樣到目前爲止

var app = angular.module('app', []); 

app.controller('CompaniesController', ['$scope', '$http', 
    function($scope, $http) { 
    $http.get('json/companies.json').success(function(data) { 
     $scope.companies = data; // get data from json 

     $scope.techStack = [] 

     $scope.companies = data.query(function(companies) { 
      console.log(companies); //I expected to see data here 
     }); 
    }); 

    } 
]); 

顯然我做錯了什麼。

+0

說實話你問一個問題開始,然後你在你的控制器顯示的不是你的問題的第一部分,近有關。不過,我認爲你可以通過幾個for循環和[輔助方法](http://underscorejs.org/#uniq)獲得你想要的。 – 2014-10-01 10:44:04

回答

28

使用角度的的forEach:

var app = angular.module('app', []); 
    app.controller('CompaniesController', ['$scope', '$http', 
     function($scope, $http) { 
     $http.get('json/companies.json').success(function(data) { 
      $scope.companies = data; // get data from json 
       angular.forEach($scope.companies, function(item){ 
        console.log(item.technologies); 
       }) 
      }); 
     }); 

     } 
    ]); 
3

爲了在AngularJS中遍歷數組,您可以簡單地使用angular.forEach。例如,

angular.forEach(companiesList, function(company) { 
    //Here you can access each company. 
}); 

我已經根據你的代碼,一個簡單的演示,列出「公司」和獨特「技術」。

用於通過數據循環DEMO

1

用戶角度的的foreach功能。

2

試試這個

var app = angular.module('app', []); 

app.controller('CompaniesController', ['$scope', '$http', 
    function($scope, $http) { 
    $http.get('json/companies.json').success(function(data) { 
     $scope.companies = data; // get data from json 

     $scope.techStack = [] 

     angular.forEach($scope.companies, function(item){ 
      $scope.techStack = item.technologies; 
      var uniqueTech = []; 
      for (var i = 0; i < $scope.techStack.length; i++) 
      { 
       if (uniqueTech.indexOf($scope.techStack[i]) == -1) 
        uniqueTech.push($scope.techStack[i]); 
      } 
      console.log("Unique Technologies : " + uniqueTech); 

     }) 
    }); 

    } 
]); 
6

如果你只需要顯示在UI嵌套數組,你可以做直鑑於 例如

  <tr ng-repeat="i in Items"> 
       <td valign="top">{{i.Value}}</td> 
       <td valign="top"> 
        <table> 
         <tr ng-repeat="c in i.Children"> 
          <td>{{c.Value}}</td> 
         </tr> 
        </table> 
       </td> 
      </tr>