簡體   English   中英

如何通過匹配ID將數組推入對象

[英]how to push array into object by matching ids

我要從包含currentDataResult和pastDataResult的api返回一個對象數組。

[
{
    "sectionCurrentDataResult": [
        {
            "section_id": 14785,
            "subdivision_name": "Stratton Woods",
        },
        {
            "section_id": 14790,
            "subdivision_name": "Stratton Woods",
        },
        {
            "section_id": 14791,
            "subdivision_name": "Stratton Woods"
        },
        {
            "section_id": 14792,
            "subdivision_name": "Stratton Woods"
        },
        {
            "section_id": 14781,
            "subdivision_name": "Stratton Woods"
        },
        {
            "section_id": 14786,
            "subdivision_name": "Stratton Woods"
        },
        {
            "section_id": 14787,
            "subdivision_name": "Stratton Woods"
        },
        {
            "section_id": 14788,
            "subdivision_name": "Stratton Woods"
        },
        {
            "section_id": 14782,
            "subdivision_name": "Stratton Woods"
        },
        {
            "section_id": 14783,
            "subdivision_name": "Stratton Woods"
        },
        {
            "section_id": 14784,
            "subdivision_name": "Stratton Woods"
        },
        {
            "section_id": 5326,
            "subdivision_id": 1439,
            "subdivision_name": "Stratton Woods"
        }
    ]
},
{
    "sectionPastDataResult": [
        {
            "section_id": 5326,
            "price_min": 177,
            "price_max": 235
        },
        {
            "section_id": 14785,
            "price_min": 190,
            "price_max": 220
        },
        {
            "section_id": 14786,
            "price_min": 238,
            "price_max": 292
        },
        {
            "section_id": 14788,
            "price_min": 186,
            "price_max": 205
        },
        {
            "section_id": 14790,
            "price_min": 150,
            "price_max": 269
        },
        {
            "section_id": 14783,
            "price_min": 150,
            "price_max": 260
        },
        {
            "section_id": 14787,
            "price_min": 90,
            "price_max": 90
        },
        {
            "section_id": 14792,
            "price_min": 177,
            "price_max": 235
        },
        {
            "section_id": 14791,
            "price_min": 145,
            "price_max": 221
        },
        {
            "section_id": 14784,
            "price_min": 148,
            "price_max": 186
        },
        {
            "section_id": 14781,
            "price_min": 155,
            "price_max": 200
        },
        {
            "section_id": 14782,
            "price_min": 150,
            "price_max": 170
        }
      ]
    }
  ]

我需要將匹配的pastDataObject(by section_id)對象作為嵌套數組推入currentDataResult對象。 這就是它需要的樣子

"sectionCurrentDataResult": [
        {
            "section_id": 14785,
            "subdivision_name": "Stratton Woods",
            "sectionHistory":[{
               "section_id": 14785,
               "price_min": 190,
               "price_max": 220
            }]
        },
        {
            "section_id": 14790,
            "subdivision_name": "Stratton Woods",
            "sectionHistory":[{
               "section_id": 14790,
               "price_min": 150,
               "price_max": 269
            }]
        },
        etc....
        ]

我創建了一個服務,該服務同時獲取當前和過去的數據結果,並對過去的數據結果進行重新排序以匹配當前的結果。 我需要幫助的是將過去的數據數組推送到當前數據對象中。 現在它錯誤地將整個過去的數據數組推入第一個對象到當前數據數組。我已經用代碼設置了一個插件。

plunker

app.controller('MainCtrl', function($scope,bigEnchilada,inputHistorySvc) {

   for (var i = 0; i < bigEnchilada[0].sectionCurrentDataResult.length; i++) {
        bigEnchilada[0].sectionCurrentDataResult[i].sectionHistory =  inputHistorySvc.historyInputs(bigEnchilada);
        }
      $scope.sections = bigEnchilada[0].sectionCurrentDataResult;

    });

這是您要找的東西嗎?

var app = angular.module('angularjs-starter', []);

app.controller('MainCtrl', function($scope,bigEnchilada,inputHistorySvc) {
var list = inputHistorySvc.historyInputs(bigEnchilada);
for (var i = 0; i < bigEnchilada[0].sectionCurrentDataResult.length; i++){
   for (var j = 0; j < list.length; j++ ) {
      if(bigEnchilada[0].sectionCurrentDataResult[i].section_id ==      list[j].section_id){
          bigEnchilada[0].sectionCurrentDataResult[i].sectionHistory = list[j];
      }
   }
}
  $scope.sections = bigEnchilada[0].sectionCurrentDataResult;

});

輸出:

[
{
"section_id": 14785,
"subdivision_name": "Stratton Woods",
"sectionHistory": {
  "section_id": 14785,
  "price_min": 190,
  "price_max": 220
}
},
{
"section_id": 14790,
"subdivision_name": "Stratton Woods",
"sectionHistory": {
  "section_id": 14790,
  "price_min": 150,
  "price_max": 269
}
},
 {
"section_id": 14791,
"subdivision_name": "Stratton Woods",
"sectionHistory": {
  "section_id": 14791,
  "price_min": 145,
  "price_max": 221
}
},

等等

var inputHistory = inputHistorySvc.historyInputs(bigEnchilada);
  for (var i = 0; i < bigEnchilada[0].sectionCurrentDataResult.length; i = i + 1) {
      for (x = 0; x < inputHistory.length; x = x + 1) {
        if (bigEnchilada[0].sectionCurrentDataResult[i].section_id === inputHistory[x].section_id) {
          bigEnchilada[0].sectionCurrentDataResult[i].sectionHistory = inputHistory[x];
        }
      }
      }
  $scope.sections = bigEnchilada[0].sectionCurrentDataResult;

您可以使用一個臨時對象和兩個單獨的循環。 一種用於獲取所有引用,第二種用於將數據分配給該引用。 此解決方案中的Big OO(n)

 var data = [{ "sectionCurrentDataResult": [{ "section_id": 14785, "subdivision_name": "Stratton Woods", }, { "section_id": 14790, "subdivision_name": "Stratton Woods", }, { "section_id": 14791, "subdivision_name": "Stratton Woods" }, { "section_id": 14792, "subdivision_name": "Stratton Woods" }, { "section_id": 14781, "subdivision_name": "Stratton Woods" }, { "section_id": 14786, "subdivision_name": "Stratton Woods" }, { "section_id": 14787, "subdivision_name": "Stratton Woods" }, { "section_id": 14788, "subdivision_name": "Stratton Woods" }, { "section_id": 14782, "subdivision_name": "Stratton Woods" }, { "section_id": 14783, "subdivision_name": "Stratton Woods" }, { "section_id": 14784, "subdivision_name": "Stratton Woods" }, { "section_id": 5326, "subdivision_id": 1439, "subdivision_name": "Stratton Woods" }] }, { "sectionPastDataResult": [{ "section_id": 5326, "price_min": 177, "price_max": 235 }, { "section_id": 14785, "price_min": 190, "price_max": 220 }, { "section_id": 14786, "price_min": 238, "price_max": 292 }, { "section_id": 14788, "price_min": 186, "price_max": 205 }, { "section_id": 14790, "price_min": 150, "price_max": 269 }, { "section_id": 14783, "price_min": 150, "price_max": 260 }, { "section_id": 14787, "price_min": 90, "price_max": 90 }, { "section_id": 14792, "price_min": 177, "price_max": 235 }, { "section_id": 14791, "price_min": 145, "price_max": 221 }, { "section_id": 14784, "price_min": 148, "price_max": 186 }, { "section_id": 14781, "price_min": 155, "price_max": 200 }, { "section_id": 14782, "price_min": 150, "price_max": 170 }] }]; void function () { var o = {}; data[0].sectionCurrentDataResult.forEach(function (a) { o[a.section_id] = a; }); data[1].sectionPastDataResult.forEach(function (a) { o[a.section_id].sectionHistory = [a]; }); }(); document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>'); 

如果破壞此json,實際上可以避免嵌套循環,請按section_id對其進行排序,然后僅在單個循環中創建所需的對象。 您還可以避免if -else循環和equality check

     // Get sorted array of  sectionCurrentDataResult
var array1 = a[0]["sectionCurrentDataResult"].sort(function(x,y){
     return x.section_id>y.section_id? 1 : x.section_id<y.section_id? -1 :0; 
  })

 // Get sorted array of  sectionPastDataResult

var array2= a[1]["sectionPastDataResult"].sort(function(x,y){
     return x.section_id>y.section_id? 1 : x.section_id<y.section_id? -1 :0; 
  })

// Will be populated with merged data
var sectionCurrentDataResult=[]

  for(var a = 0;a<array1.length;a++){
      var sectionHistory=[];
      sectionHistory.push({
      "section_id":array2[a].section_id,
      "price_min":array2[a].price_min,
      "price_max":array2[a].price_max
      })
      sectionCurrentDataResult.push({
      "section_id":array1[a].section_id,
      "subdivision_name":array1[a].subdivision_name,
      "sectionHistory":sectionHistory
      })
  }
  console.log(sectionCurrentDataResult);

工作實例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM