2014-10-01 21 views
12

ho bisogno di scorrere matrice JSON nidificato che sembra cheScorrere nidificato matrice JSON regolatore angolare e ottenere valori unici

[ 
    { 
    "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" 
    } 
] 

Quello che voglio è per scorrere l'elenco delle tecnologie in ciascuna società e poi ritorno una lista di valori unici Tuttavia, non sono riuscito ad accedere a una singola azienda negli array della società nel controller. Sembra che sia così finita

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 
     }); 
    }); 

    } 
]); 

A quanto pare sto facendo qualcosa di sbagliato.

+0

Per essere onesti, stai inizialmente facendo una domanda, e quindi quello che mostri nel controller non è quasi pertinente alla prima parte della tua domanda. Comunque penso che tu possa ottenere quello che vuoi da un paio di cicli for e [un metodo helper] (http://underscorejs.org/#uniq). –

risposta

28
forEach

Uso di angolare:

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

Per eseguire il looping della matrice in AngularJS, è sufficiente utilizzare angular.forEach. Ad esempio,

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

ho fatto un demo semplice, sulla base di codice che lista "Aziende" e unici "Tecnologie".

funzione foreach DEMO

1

utente di angolare di collegamento in cascata dati.

2

provare questo

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

Se è necessario solo per visualizzare array nidificato su interfaccia utente, è possibile farlo direttamente in vista esempio

  <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> 
Problemi correlati