2017-01-16 122 views
1

我有下面的控制器,它是Stack Overflow上另一个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这三个阵列成一个阵列。这些阵列在结构上是绝对相同的与记录正在存储的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"> 

我也包括JSON.stringify的在线JSON表示($ 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