2017-07-22 25 views
0

我有JavaScript的變量,以便我可以查看引擎蓋下面發生了什麼,可以這麼說。爲什麼角度擴展函數沒有組合兩個json對象

前兩個變量正在顯示其各自的對象很好,但不是第三個,它使用angular.extend來組合從兩個不同數據庫檢索到的兩個json對象。一個是本地數據庫,另一個來自生產數據庫。

兩個JSON之間的公共ID是什麼我想 「合併」

JSON 1:

[{"ID": 1, "TITLE": "CSR", "PHONE": "555-555-1212", "FNAME": "JOHN", "LNAME": "SMITH"}] 

JSON 2:

[{"ID": 1, "GROUP_MEMBER_ID": "1","GROUP_MEMBER_TYPE_ID":"4","GROUP_ID":"1"}] 

的結果,我想看到:

[{"ID": 1, "GROUP_MEMBER_ID": "1","GROUP_MEMBER_TYPE_ID":"4","GROUP_ID":"1", "TITLE": "CSR", "PHONE": "555-555-1212", "FNAME": "JOHN", "LNAME": "SMITH"}] 

我一直在試圖使用angular.extend無效:

// local json objects to view result sets 
var mLocalJson = {}; 
var mProdJson = {}; 
var mCombinedJson = {}; 

var teamApp = angular.module('teamApp', []) 

teamApp.controller('mainController', function($scope, $http) { 
$scope.documentsLocal = []; 
$scope.documentsProd = []; 
$scope.documentsCombined = []; 


$scope.loadDataLocal = function() { 
    $http.post("php/getTeamsLocal.php") 
     .then(function(resultLocal) { 
      $scope.documentsLocal = resultLocal.data; 
      mLocalJson = resultLocal.data; 
     }); 
}; 

$scope.loadDataProd = function() { 
    $http.post("php/getTeamsProd.php") 
     .then(function(resultProd) { 
      $scope.documentsProd = resultProd.data; 
      mProdJson = resultProd.data; 
     }); 
}; 

$scope.loadDataCombined = function(){ 
    mCombinedJson = angular.extend($scope.documentsCombined, $scope.documentsProd, $scope.documentsLocal); 
}; 
}); 

我試過了for循環。我曾嘗試以下:

$scope.loadDataCombined = function(){ 
    mCombinedJson = angular.extend($scope.documentsCombined, mProdJson, mLocalJson); 
}; 

不管是什麼我都試過mCombinedJson是NULL

+0

你肯定沒有'mProdJson'或'mLocalJson'爲空或空? –

回答

0

的API沒有返回一個JavaScript對象。它返回一個包含一個JavaScript對象內容的JavaScript數組。使用angular.extend將數組內的對象組合起來。

var array1 = [{"ID": 1, "TITLE": "CSR", "PHONE": "555-555-1212", "FNAME": "JOHN", "LNAME": "SMITH"}]; 
 
var array2 = [{"ID": 1, "GROUP_MEMBER_ID": "1","GROUP_MEMBER_TYPE_ID":"4","GROUP_ID":"1"}]; 
 

 
var combinedArray = [angular.extend(array1[0],array2[0])]; 
 

 
console.log(combinedArray);
<script src="//unpkg.com/angular/angular.js"></script>

+0

謝謝你的例子。您的代碼有效,但「mCombinedJson」仍爲空 – kronus

+0

請參見[JavaScript數組:[]'和[{}']之間的區別(https://davidwalsh.name/javascript-arrays-brackets-braces) – georgeawg

0

我用循環來解決我的問題:

$scope.loadDataProd = function() { 
    $http.post("php/getTeamsProd.php") 
     .then(function(resultProd) { 
      $scope.documentsProd = resultProd.data; 
      mProdJson = resultProd.data; 
      for (var i = 0; i < mLocalJson.length; i++) { 
       for (var j = 0; j < mProdJson.length; j++) { 
        if (mLocalJson[i].TEAM_ID == mProdJson[j].TEAMM_ID) { 
         mCombinedJson.push([{ 
          "TEAM_GROUP_ID": $scope.documentsLocal[i].TEAM_GROUP_ID, 
          "TEAM_GROUP_MEMBER_ID": $scope.documentsLocal[i].TEAM_GROUP_MEMBER_ID, 
          "TEAM_GROUP_DESC": $scope.documentsLocal[i].TEAM_GROUP_DESC, 
          "TEAM_GROUP_MEMBER_TYPE_DESC": $scope.documentsLocal[i].TEAM_GROUP_MEMBER_TYPE_DESC, 
          "TEAM_ID": $scope.documentsProd[j].TEAMM_ID, 
          "TEAMM_DESC": $scope.documentsProd[j].TEAMM_DESC, 
          "TEAMM_EMAIL": $scope.documentsProd[j].TEAMM_EMAIL, 
          "TEAMM_EXTENSION": $scope.documentsProd[j].TEAMM_EXTENSION, 
          "TEAMM_EZLYNX_USERNAME": $scope.documentsProd[j].TEAMM_EZLYNX_USERNAME, 
          "TEAMM_FAX": $scope.documentsProd[j].TEAMM_FAX, 
          "TEAMM_NAME": $scope.documentsProd[j].TEAMM_NAME, 
          "TEAMM_PHONE": $scope.documentsProd[j].TEAMM_PHONE, 
          "TEAMM_QUEUE": $scope.documentsProd[j].TEAMM_QUEUE, 
          "TEAMM_QUEUE_GROUP": $scope.documentsProd[j].TEAMM_QUEUE_GROUP, 
          "TEAMM_QUEUE_KILLED": $scope.documentsProd[j].TEAMM_QUEUE_KILLED, 
          "TEAMM_QUEUE_SENT": $scope.documentsProd[j].TEAMM_QUEUE_SENT, 
          "TEAMM_TYPE": $scope.documentsProd[j].TEAMM_TYPE 
         }]); 
        } 
       } 
      } 
     }); 
}; 

$scope.loadDataCombined = function(){ 
    setTimeout(function(){ 

     for (var i = 0; i < mLocalJson.length; i++) { 
      for (var j = 0; j < mProdJson.length; j++) { 
       if (mLocalJson[i].TEAM_ID == mProdJson[j].TEAMM_ID) { 
        mCombinedJson.push([{ 
          "TEAM_GROUP_ID": mLocalJson[i].TEAM_GROUP_ID, // 1 - 7 
          "TEAM_GROUP_MEMBER_ID": mLocalJson[i].TEAM_GROUP_MEMBER_ID, 
          "TEAM_GROUP_DESC": mLocalJson[i].TEAM_GROUP_DESC, // Cereal Killers, Guns n Closes, etc... 
          "TEAM_GROUP_MEMBER_TYPE_DESC": $scope.documentsLocal[i].TEAM_GROUP_MEMBER_TYPE_DESC, // Director, Manager, Assistant Manager, Producer 
          "TEAM_ID": mProdJson[j].TEAMM_ID, 
          "TEAMM_DESC": mProdJson[j].TEAMM_DESC, 
          "TEAMM_EMAIL": mProdJson[j].TEAMM_EMAIL, 
          "TEAMM_EXTENSION": mProdJson[j].TEAMM_EXTENSION, 
          "TEAMM_EZLYNX_USERNAME": mProdJson[j].TEAMM_EZLYNX_USERNAME, 
          "TEAMM_FAX": mProdJson[j].TEAMM_FAX, 
          "TEAMM_NAME": mProdJson[j].TEAMM_NAME, 
          "TEAMM_PHONE": mProdJson[j].TEAMM_PHONE, 
          "TEAMM_QUEUE": mProdJson[j].TEAMM_QUEUE, 
          "TEAMM_QUEUE_GROUP": mProdJson[j].TEAMM_QUEUE_GROUP, 
          "TEAMM_QUEUE_KILLED": mProdJson[j].TEAMM_QUEUE_KILLED, 
          "TEAMM_QUEUE_SENT": mProdJson[j].TEAMM_QUEUE_SENT, 
          "TEAMM_TYPE": mProdJson[j].TEAMM_TYPE 
         }]); 
       } 
      } 
     } 

    }, 300); 
    $scope.lDc(); 
}; 

$scope.lDc = function(){ 
    $scope.documentsCombined = mCombinedJson; 
};