2017-04-25 113 views
-1

我將首先用一個例子來解釋我想達到的目標。 我將有一個名爲'Code'的鍵作爲合併參數。根據密鑰合併多個陣列和子陣列

例子:

var Items = [{'Item_Id':1,'Item_Name':'Soap','Code':001},[{'Item_Id':2,'Item_Name':'Powder','Code':002] 

var ItemPrice = [{'ItemPrice_Id':1,'ItemPrice_ItemId':1,'Price':'10$','Code':001},[{'ItemPrice_Id':2,'ItemPrice_ItemId':2,'Price':'20$','Code':002] 

var ItemFeatures = [{'FeatureId':2,'FeatureName':'Cool','Code':001},{'FeatureId':3,'FeatureName':'Nice','Code':001}, 
[{'FeatureId':4,'FeatureName':'Pretty','Code',002},{'FeatureId':5,'FeatureName':'Beautiful','Code':002} 

]; 

現在我只是在考慮3個陣列,但是我將在總共9個陣列。 我的結果數組應該將元素與鍵作爲代碼進行組合。 這裏如果您看到ItemFeatures包含2個元素,代碼爲001和002,所以它將被轉換爲子數組。

所以結果應該如下。

[{'Item_Id':1,'Item_Name':'Soap','ItemPrice_Id':1,'ItemPrice_ItemId':1,'Price':'10$','ItemFeatures': [{'FeatureId':2,'FeatureName':'Cool'},{'FeatureId':3,'FeatureName':'Nice'}] 
}, 
{'Item_Id':2,'Item_Name':'Powder','ItemPrice_Id':2,'ItemPrice_ItemId':2,'Price':'20$','ItemFeatures': [{'FeatureId':4,'FeatureName':'Pretty'},{'FeatureId':5,'FeatureName':'Beautiful'}] 
}]; 

];

在這個例子中,ItemFeatures被轉換爲子數組,因爲它有多個具有相同代碼的項目。 我將有兩個更多的數組,它們將具有多個具有相同代碼的項目。 在結果數組中ItemFeatures子數組的方式,我也需要其他子數組。

我該怎麼做?你能幫我解決這個問題嗎? 是JS的新手,卡位。

回答

0

您可以使用Array.mapArray.findArray.filterObject.assign組合找到匹配的對象,並將它們合併成一個:

var Items = [{'Item_Id':1,'Item_Name':'Soap','Code':001}, {'Item_Id':2,'Item_Name':'Powder','Code':002}] 
 
var ItemPrice = [{'ItemPrice_Id':1,'ItemPrice_ItemId':1,'Price':'10$','Code':001}, {'ItemPrice_Id':2,'ItemPrice_ItemId':2,'Price':'20$','Code':002}]; 
 
var ItemFeatures = [{'FeatureId':2,'FeatureName':'Cool','Code':001},{'FeatureId':3,'FeatureName':'Nice','Code':001}, {'FeatureId':4,'FeatureName':'Pretty','Code': 002}, {'FeatureId':5,'FeatureName':'Beautiful','Code':002}]; 
 

 
// convert Items into another array of objects 
 
const merged = Items.map((item) => { 
 
    // add all of the matching ItemPrice properties to Item 
 
    return Object.assign(item, ItemPrice.find(iprice => iprice.Code === item.Code), { 
 
    // add a key "ItemFeatures" with matching ItemFeatures 
 
    ItemFeatures: ItemFeatures.filter(feature => feature.Code === item.Code) 
 
    }); 
 
}); 
 

 
console.log(merged);