Lodash Js создает древовидную структуру с массивами и объектами - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь создать дерево Lodash, такое как массивы и объекты.У меня есть два массива (например, категории и продукты) с общим ключом.Необходимо сформировать древовидную структуру со строковым индексом.

let categories = [{ 
    id: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
    category: 'category c227',
  },{
    id: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
    category: 'category 81aa',
  }
];
let products = [{
    mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
    pName: 'product 1 c227', 
}, {
    mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
    pName: 'product 2 c227', 
}, {
    mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
    pName: 'product 1 81aa', 
}, {
    mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
    pName: 'product 2 81aa', 
},{
    mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
    pName: 'product 3 81aa',
}];

Нужна такая структура, как

[
   {
      "category": { id, category}, 
      "products ": [
             { mId, pName },
             { mId, pName },
             { mId, pName }
       ]
   },{
      "category": { id, category}, 
      "products ": [
             { mId, pName },
             { mId, pName },
             { mId, pName }
       ]
   },
]

Я пытался получить соответствующие продукты категорий.Но нужна помощь, чтобы следовать вышеупомянутой структуре.

let arrResult = _.map(categories, function(s) {
    console.log(s);
    return _.filter(products, function(i) {
        return _.isEqual(s.id, i.mId);
    });
});

console.log(arrResult);

Результат консоли:

{ id: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
  category: 'category c227' }
{ id: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
  category: 'category 81aa' }
[ [ { mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
      pName: 'product 1 81aa' },
    { mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
      pName: 'product 2 81aa' },
    { mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
      pName: 'product 3 81aa' } ],
  [ { mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
      pName: 'product 1 c227' },
    { mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
      pName: 'product 2 c227' } ] ]

Ответы [ 3 ]

0 голосов
/ 18 ноября 2018

Вам нужно обернуть объект категории в ключ category

Этот фрагмент должен работать на вас

let categories = [{
  id: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
  category: 'category c227',
}, {
  id: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
  category: 'category 81aa',
}];
let products = [{
  mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
  pName: 'product 1 c227',
}, {
  mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
  pName: 'product 2 c227',
}, {
  mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
  pName: 'product 1 81aa',
}, {
  mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
  pName: 'product 2 81aa',
}, {
  mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
  pName: 'product 3 81aa',
}];


const yourTree = categories.map(cat => {
  return {
    category: {
      id: cat.id,
      category: cat.category
    },
    products: products.filter(product => product.mId === cat.id)
  };
});

console.log(yourTree);
0 голосов
/ 18 ноября 2018

Это в ES6 может быть решено в сжатой форме Array.map и Array.filter:

let categories = [{ id: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f', category: 'category c227', }, { id: 'b21a0b57-2a2b-3750-c227-8776cedf707a', category: 'category 81aa', }];
let products = [{ mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a', pName: 'product 1 c227', }, { mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a', pName: 'product 2 c227', }, { mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f', pName: 'product 1 81aa', }, { mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f', pName: 'product 2 81aa', }, { mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f', pName: 'product 3 81aa', }];

const result = categories.map(category => 
  ({category, products: products.filter(y => y.mId == category.id) }))

console.log(result)
0 голосов
/ 18 ноября 2018

Если вы хотите сгруппировать товары по идентификатору, вы можете попробовать это. Надеюсь, это поможет.

let categories = [{
    id: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
    category: 'category c227',
},{
    id: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
    category: 'category 81aa',
}
];
let products = [{
    mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
    pName: 'product 1 c227',
}, {
    mId: 'b21a0b57-2a2b-3750-c227-8776cedf707a',
    pName: 'product 2 c227',
}, {
    mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
    pName: 'product 1 81aa',
}, {
    mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
    pName: 'product 2 81aa',
},{
    mId: 'c3c70dff-bbdf-8701-81aa-5d60dad9d14f',
    pName: 'product 3 81aa',
}];


const combine = (categories, products) =>

    categories.map((category) => {

        const result = products.filter((val) => val.mId === category.id);

        return { category, products: result };
    });

console.log(combine(categories, products));
...