2015-04-29 23 views
24

Voglio aggiungere il seguente array di oggetti con quello esistente in angulajs per implementare il carico di più funzionalità.Come unire due array di oggetti in angularjs?

ie, aggiungendo ogni volta una risposta AJAX con una esistente.

ho una variabile, $scope.actions che contiene i seguenti dati JSON,

{ 
    "total": 13, 
    "per_page": 2, 
    "current_page": 1, 
    "last_page": 7, 
    "next_page_url": "http://invoice.local/activities/?page=2", 
    "prev_page_url": null, 
    "from": 1, 
    "to": 2, 
    "data": [ 
     { 
      "id": 2108, 
      "action_type_id": 202, 
      "user_id": 1 
     }, 
     { 
      "id": 2108, 
      "action_type_id": 202, 
      "user_id": 1 
     } 
    ] 
} 

voglio accodare seguente JSON risposta ogni volta che questa variabile.

{ 
    "data": [ 
     { 
      "id": 2108, 
      "action_type_id": 202, 
      "user_id": 1 
     }, 
     { 
      "id": 2108, 
      "action_type_id": 202, 
      "user_id": 1 
     } 
    ] 
} 

Ho provato con $scope.actions.data.concat(data.data);

ma non funziona e ottenere seguente messaggio di errore

$scope.actions.data.concat is not a function

+0

angolare ha sia 'extend' e 'copia' che copia gli oggetti – adeneo

+0

http://stackoverflow.com/questi on/19765283/javascript-able-to-merge-two-array –

+0

Poiché la nuova variabile è esattamente uguale alla proprietà 'data' nel primo campione, alcuni chiarimenti potrebbero aiutare – charlietfl

risposta

35

È possibile utilizzare angular.extend(dest, src1, src2,...);

Nel tuo caso sarebbe:

angular.extend($scope.actions.data, data); 

vedere la documentazione qui:

https://docs.angularjs.org/api/ng/function/angular.extend

In caso contrario, se si ottiene solo i nuovi valori dal server, è possibile effettuare le seguenti operazioni

for (var i=0; i<data.length; i++){ 
    $scope.actions.data.push(data[i]); 
} 
+2

Non funziona nel mio caso .. –

+0

non puoi dare maggiori informazioni? –

+2

'angular.extend ($ scope.actions, data); sta sostituendo non aggiungendo: ( –

18

Questo funziona per me:

$scope.array1 = $scope.array1.concat(array2) 

Nel tuo caso sarebbe:

$scope.actions.data = $scope.actions.data.concat(data) 
+1

Questa è la risposta corretta effettiva. – DavidH

4
$scope.actions.data.concat is not a function 

stesso problema con me, ma io risolvere il problema

$scope.actions.data = [].concat($scope.actions.data , data) 
2

semplice

var a=[{a:4}], b=[{b:5}] 

angular.merge(a,b) // [{a:4, b:5}] 

Testato su angolare 1.4.1

+2

A differenza di extend(), l'unione() ricade in modo ricorsivo nelle proprietà dell'oggetto degli oggetti di origine, eseguendo una copia profonda. – Serge