Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在对象JavaScript中添加对象数组_Javascript_Arrays_Object - Fatal编程技术网

在对象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