2017-10-13 19 views
0

您好:)我需要一些幫助,下面:如何合併數組多維對象不改變裏面的物體對象

我有這樣的:

[{"Condenser /Heat Pump":{"2":299,"starttime":"10/05/17","productClass":"Condenser /Heat Pump"}}, 
{"Condenser /Heat Pump":{"1":2529,"2":2270,"starttime":"10/06/17","productClass":"Condenser /Heat Pump"}}, 
{"Coorporate Coils":{"2":104,"3":216,"starttime":"10/05/17","productClass":"Coorporate Coils"}}, 
{"Coorporate Coils":{"1":1107,"2":811,"3":0,"starttime":"10/06/17","productClass":"Coorporate Coils"}}] 

,我想獲得它像這個:

[{"Condenser /Heat Pump":{"2":299,"starttime":"10/05/17","productClass":"Condenser /Heat Pump"},{"1":2529,"2":2270,"starttime":"10/06/17","productClass":"Condenser /Heat Pump"}},{"Coorporate Coils":{"2":104,"3":216,"starttime":"10/05/17","productClass":"Coorporate Coils"},{"1":1107,"2":811,"3":0,"starttime":"10/06/17","productClass":"Coorporate Coils"}}] 

我一直在試圖找到一種方法來做到這一點,但不幸的是我還沒有能夠。到目前爲止,我只能夠做一些事情非常不靈活:

var hp=[]; 
var cc=[]; 

for(i=0; i<mergedProductClasses.length; i++){ 
    Object.getOwnPropertyNames(mergedProductClasses[i]).forEach(
     function (val, idx, array) { 
     if(val =="Condenser /Heat Pump"){ 
      hp.push(mergedProductClasses[i]["Condenser /Heat Pump"]) 
     }else if(val =="Coorporate Coils"){ 
      cc.push(mergedProductClasses[i]["Coorporate Coils"]) 
     } 
     } 
    ) 
} 

這有點兒工程...它給了我一些幫助,但我有多個「丘壑」所以如果我添加一個新的我會必須每次都編輯我的代碼以添加該異常...我想看看是否有辦法更有效地執行此操作......並且我明白,我目前的方法並不完全符合我的要求但是這種格式允許我根據數據做我需要的。對不起,如果這是太基本x_x

我試過這Merge duplicate multidimensional objects in array of objects但這種方法合併我所有的對象,而不考慮日期,我關心的日期。

回答

1

而不是使用硬編碼的鍵,創建一個數組來包含鍵,並檢查該數組中是否已存在該對象。

可能這個代碼是不是正是你要尋找的,但應該給你什麼,我談論的一個想法:

var products = [{ 
 
    "Condenser /Heat Pump": { 
 
     "2": 299, 
 
     "starttime": "10/05/17", 
 
     "productClass": "Condenser /Heat Pump" 
 
    } 
 
    }, 
 
    { 
 
    "Condenser /Heat Pump": { 
 
     "1": 2529, 
 
     "2": 2270, 
 
     "starttime": "10/06/17", 
 
     "productClass": "Condenser /Heat Pump" 
 
    } 
 
    }, 
 
    { 
 
    "Coorporate Coils": { 
 
     "2": 104, 
 
     "3": 216, 
 
     "starttime": "10/05/17", 
 
     "productClass": "Coorporate Coils" 
 
    } 
 
    }, 
 
    { 
 
    "Coorporate Coils": { 
 
     "1": 1107, 
 
     "2": 811, 
 
     "3": 0, 
 
     "starttime": "10/06/17", 
 
     "productClass": "Coorporate Coils" 
 
    } 
 
    } 
 
] 
 

 
var merged = {}; 
 
var output = document.getElementById("output") 
 

 
for (var i = 0; i < products.length; i++) { 
 
    Object.getOwnPropertyNames(products[i]).forEach(function(val, idx, array) { 
 
    if (typeof(merged[val]) == "undefined") merged[val] = [] 
 
    merged[val].push(products[i][val]) 
 
    }) 
 
} 
 

 
output.innerText = JSON.stringify(merged, undefined, 2)
<pre id="output"> 
 
</pre>

1

這可恥了漫長。這就是你要找的東西:

const units = [{"Condenser /Heat Pump":{"2":299,"starttime":"10/05/17","productClass":"Condenser /Heat Pump"}}, 
{"Condenser /Heat Pump":{"1":2529,"2":2270,"starttime":"10/06/17","productClass":"Condenser /Heat Pump"}}, 
{"Coorporate Coils":{"2":104,"3":216,"starttime":"10/05/17","productClass":"Coorporate Coils"}}, 
{"Coorporate Coils":{"1":1107,"2":811,"3":0,"starttime":"10/06/17","productClass":"Coorporate Coils"}}] 

const objKey = obj => Object.keys(obj)[0] 
const objValue = obj => Object.values(obj)[0] 
newObj = {} 
let unitName 
for (let unit of units) { 
    unitName = objKey(unit) 
    newObj[unitName] = [] 
} 
let unitData 
for (let unit of Object.values(units)) { 
    unitData = objValue(unit) 
    newObj[objKey(unit)].push(unitData) 
} 
console.log(newObj)