2017-01-16 2 views
1

У меня есть следующий контроллер, который был результатом другого OP на переполнении стека.Объединить массив массивов в AngularJS

var getData = function() { 
     var swindon = $http.get('(url)/swi/10?expand=true'), 
      paddington = $http.get('(url)/pad/10?expand=true'), 
      reading = $http.get('(url)/rdg/10?expand=true'); 
     $q.all([swindon,paddington,reading]).then(function(arrayOfResults) { 
      $scope.listOfServices = arrayOfResults; 
      console.log($scope.listOfServices); 
     }); 
    }; 

    getData(); 

Какие результаты в чем-то вроде этого

enter image description here

То, что я хотел бы сделать сейчас CONCAT эти три массива в один массив. Массивы являются Absolutly идентичны по структуре записи хранятся в массиве trainServices

я пытался что-то вдоль линий

$scope.listOfServices = $scope.listOfServices.data.concat(data); 

, которая возвращается как неопределенные

можно использовать массивы в вложенной NG-REPEAT, но мне нужно отфильтровать дубликаты из трех массивов, поэтому я нуждаюсь в них как один. Данные взяты из живой передачи, поэтому я не могу выполнить запрос до того, как данные попадут в приложение.

Это, как я называю массивы в момент

<tbody ng-repeat="item in listOfServices"> 
     <tr ng-repeat="service in item.data.trainServices | customDelayFilter"> 

Я также включал представление ONLINE JSON из JSON.stringify ($ scope.listOfServices)

enter image description here

Не уверен, почему на верхнем уровне говорит JSON .. это фактически не строка на выходе

ответ

2

вы можете попробовать:

$scope.listOfServices = [].concat(...arrayOfResults.map(item => item.data.trainServices)); 

это должно дать вам concated массив объектов trainServices'

arrayOfResults.map(item => item.data.trainServices) 

этот код в нашем случае возвращает массив из трех trainServices массивов, используя Array.prototype.map функцию

...arrayOfResults.map(item => item.data.trainServices) 

этот код использует оператор spread, что позволяет нам передавать массив массивов в Array.prototype.concat, который объединяет те массивы объектов

+0

«Array.concat не является функцией» .. и что такое ... arrayOfResults? почему три точки? – MOLEDesign

+0

Я обновил свой ответ и заменил Array.concat (собственный метод объекта Array, который равен Array.prototype.concat(), [] .concat()), ([]). Concat()) с []. массив. Если он по-прежнему не работает для вас, я попытаюсь создать плункер для вас – Andriy

+0

Я просто хочу сказать, что вы похожи, мой самый любимый человек в этом году. Работает ОТЛИЧНО и на самом деле значительно улучшает то, что у меня было. Теперь у меня есть прекрасный список всех объединенных сервисов. Фантастика! – MOLEDesign

Смежные вопросы