我首先用一个例子来解释我想要实现的目标。 我将有一个名为“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个阵列。 我的结果数组应该将元素与键组合为Code。 在这里,如果您看到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 :(得分:0)
您可以结合使用Array.map
,Array.find
,Array.filter
和Object.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);