У меня есть такой массив:
var arr = [
{"type":"color","pid":"ITEM_1","id":"ITEM_1_1"},
{"type":"color","pid":"ITEM_2","id":"ITEM_2_2"},
{"type":"size","pid":"DEFAULT_0","id":"DEFAULT_0_1"},
{"type":"size","pid":"DEFAULT_0","id":"DEFAULT_0_2"}
]
И я хочу, чтобы новый массив выглядел так:
[
{
"type": "color",
"relation":[{"pid": "ITEM_1", "id": "ITEM_1_1"},
{"pid": "ITEM_2", "id": "ITEM_2_2"}]
}, {
"type": "size",
"relation":[{"pid": "DEFAULT_0", "id": ["DEFAULT_0_1","DEFAULT_0_2"]}]
}
]
Спасибо.
===100 Спасибо, ответ Абрара.Я слегка настраиваю его для группировки одинаковых элементов pid и получаю желаемый результат.Но должен быть лучший способ сделать это?
const arr = [
{"type":"color","pid":"ITEM_1","id":"ITEM_1_1"},
{"type":"color","pid":"ITEM_2","id":"ITEM_2_2"},
{"type":"size","pid":"DEFAULT_0","id":"DEFAULT_0_1"},
{"type":"size","pid":"DEFAULT_0","id":"DEFAULT_0_2"}
];
const resultArr = [];
const groups =[];
arr.forEach((data) => {
let type = data.type;
let newArr = arr.filter(el => el.type === type);
let resObj = {
"type": type,
"relation": []
};
newArr.forEach(el => {
groups.push({"pid": el.pid, "id": el.id});
});
var group_to_values = groups.reduce(function(obj, item) {
obj[item.pid] = obj[item.pid] || [];
obj[item.pid].push(item.id);
return obj;
}, {});
resObj.relation.push(group_to_values);
if (resultArr.map(e => e.type).indexOf(type) < 0) {
resultArr.push(resObj);
}
})
console.log(resultArr);