在对象JavaScript中添加对象数组
我有两个数据对象,它们有一个相同的元素。如何将主题合并到单个数组对象中在对象JavaScript中添加对象数组,javascript,arrays,object,Javascript,Arrays,Object,我有两个数据对象,它们有一个相同的元素。如何将主题合并到单个数组对象中 var itemList = []; var categoryList = [{ cat_id: 1, cat_name: 'category1' }, { cat_id: 2, cat_name: 'category2' } ]; var productList = [{ cat_id: 1, prod_code: 'a1',
var itemList = [];
var categoryList = [{
cat_id: 1,
cat_name: 'category1'
},
{
cat_id: 2,
cat_name: 'category2'
}
];
var productList = [{
cat_id: 1,
prod_code: 'a1',
prod_name: 'product1'
},
{
cat_id: 1,
prod_code: 'a2',
prod_name: 'product2'
},
{
cat_id: 2,
prod_code: 'b1',
prod_name: 'product3'
},
{
cat_id: 2,
prod_code: 'b2',
prod_name: 'product4'
}
]
看起来像这样
itemList = [{
cat_id: 1,
cat_name: 'category1',
products: [{
prod_code: 'a1',
prod_name: 'product1'
},
{
prod_code: 'a2',
prod_name: 'product2'
}
]
},
{
cat_id: 2,
cat_name: 'category2',
products: [{
prod_code: 'b1',
prod_name: 'product3'
},
{
prod_code: 'b2',
prod_name: 'product4'
}
]
}
]
我尝试使用
itemList.push
,但似乎无法使其工作。让合并的前两个对象={…obj1,…obj2};
然后将该项推入itemList数组。也许这可以帮助你 您可以使用
map
和filter
var类别列表=[{
类别识别号:1,
类别名称:“类别1”
},
{
类别识别号:2,
类别名称:“类别2”
}
];
var productList=[{
类别识别号:1,
产品代码:“a1”,
产品名称:“产品1”
},
{
类别识别号:1,
产品代码:“a2”,
产品名称:“产品2”
},
{
类别识别号:2,
产品代码:“b1”,
产品名称:“产品3”
},
{
类别识别号:2,
产品代码:“b2”,
产品名称:“产品4”
}
];
var itemList=[…categoryList];
itemList.map(item=>{
item.products=productList.filter(pro=>pro.cat\u id===item.cat\u id);
});
console.log(itemList)代码>您可以按如下方式检查我的解决方案,这里的想法是创建categoryList的深度副本(这样categoryList仍然保持不变),然后循环遍历这两个列表并将结果添加到tempList中
var tempList = categoryList.map(a => Object.assign({}, a)); // just to do deep copy
for( var i =0; i< tempList.length; i++) {
var temp = [];
for( var j =0; j< productList.length; j++){
if(tempList[i]["cat_id"] == productList[j]["cat_id"]) {
var obj = {};
obj["prod_code"] = productList[j]["prod_code"];
obj["prod_name"] = productList[j]["prod_name"];
temp.push(obj);
}
}
tempList[i]["products"] = temp;
}
console.log(JSON.stringify(tempList[0]));
console.log(JSON.stringify(tempList[1]));
var templast=categoryList.map(a=>Object.assign({},a));//只是为了做深度复制
for(var i=0;i