Как преобразовать одномерный массив объектов в двухмерный на основе определенного ключа в компоненте vue?

Мои модули выглядят так:

[types.GET_PRODUCT_CATEGORIES] (state,{ stores }) {
    state.product_categories = {}
    console.log(stores);
    stores.forEach(message => {
        set(state.product_categories, message.id, message)
    })
    console.log('test')
    console.log(state.product_categories)
},

Результат console.log(stores) такой:

введите здесь описание изображения

Я хочу изменить объект как двумерный массив объектов по ключу parent_category_id

Как мне это сделать?

Обновление :

Например :

parent_category_id = 1, 2, 3

parent_category_name = Азия, Европа, Африка

id = 4, 5, 6, 7, 8, 9, 20

название = япония, корея, араб, англия, испания, италия, южная африка

Я хочу отображать так:

asia
   japan
   korea
   arab
europa
   england
   spain
   italy
africa
   south africa

Поэтому мне нужно преобразовать одномерный объект в двумерный.


person Success Man    schedule 20.09.2017    source источник


Ответы (2)


Я надеюсь, что это поможет вам достичь вашего решения

var dataArr=[{
	id:1,
	name:'japan',
	parent_category_id:1,
	parent_category_name:'asia'
},{
	id:2,
	name:'england',
	parent_category_id:2,
	parent_category_name:'europa'
},{
	id:3,
	name:'korea',
	parent_category_id:1,
	parent_category_name:'asia'
},{
	id:4,
	name:'arab',
	parent_category_id:1,
	parent_category_name:'asia'
},{
	id:5,
	name:'south africa',
	parent_category_id:3,
	parent_category_name:'africa'
},{
	id:6,
	name:'spain',
	parent_category_id:2,
	parent_category_name:'europa'
},{
	id:7,
	name:'italy',
	parent_category_id:2,
	parent_category_name:'europa'
}],
output ={};
dataArr.map((item,index,arr)=>{
	if(!output[item.parent_category_name]){
		let result = arr.filter(val=>{
			return val.parent_category_id==item.parent_category_id;
		})
		output[item.parent_category_name] = result.map(val=>{
			return val.name;
		});
	}
});
console.log(output);

person Narendra Jadhav    schedule 20.09.2017

Вот функция, которую я использую для группировки:

const groupBy = (arr, keyFn) => {
  const grouped = arr.reduce( (grouping, item) => {
    const key = keyFn(item);
    grouping[key] = grouping[key] || [];
    grouping[key].push(item);
    return grouping;
  }, {} );
  return Object.keys(grouped)
    .map(key => { return {key: key, group: grouped[key]}; });
}

Вы можете назвать это так:

const itemByCategoryName = (items) => {
  const keyFn = item => item.parent_category_name
  return groupBy(items, keyFn)
    .map(group => { return { parent_category_name: group.key, grouped_items: group.group }; });
}

На выходе получается массив объектов с ключом и вложенным массивом элементов.

person Richard Matsen    schedule 20.09.2017