2017-04-25 107 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);