Добавление массива объекта внутри объекта JavaScript - PullRequest
0 голосов
/ 09 марта 2020

У меня есть набор из 2 объектов данных, и они имеют один и тот же элемент. Как объединить тему в один объект массива?

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, и я не могу заставить его работать .

Ответы [ 3 ]

0 голосов
/ 09 марта 2020

Вы можете сделать трюк, используя map и filter

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'
   }
];

var itemList = [...categoryList];
itemList.map(item => {
   item.products = productList.filter( pro => pro.cat_id === item.cat_id);
});
console.log(itemList);
0 голосов
/ 09 марта 2020

Вы можете проверить мое решение, как показано ниже, здесь идея состоит в том, чтобы создать глубокую копию (так, чтобы categoryList по-прежнему оставался прежним) из categoryList и затем l oop через оба списка и добавить результат в 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]));
0 голосов
/ 09 марта 2020

пусть слились первые два объекта = {... obj1, ... obj2}; Затем поместите этот элемент в массив itemList. Может быть, это может помочь вам !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...