Итерируйте через вложенный массив json в контроллере angular и получите уникальные значения

Мне нужно выполнить итерацию через вложенный массив 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
        });
    });

  }
]); 

Видимо, я делаю что-то неправильно.

Ответ 1

Используйте angular для каждого:

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

      }
    ]); 

Ответ 2

Если вам нужно отображать только вложенный массив в пользовательском интерфейсе, вы можете сделать это прямо например.

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

Ответ 3

Чтобы перебрать массив в AngularJS, вы можете просто использовать angular.forEach. Например,

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

Я сделал простую демонстрацию на основе вашего кода, в котором перечислены "Компании" и уникальные "Технологии".

DEMO

Ответ 4

попробуйте это

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

        })
    });

  }
]); 

Ответ 5

пользователь angular функция foreach для циклического перемещения данных.