У меня есть этот json в переменной customer:
{
"customers": [
{
"id": 6,
"name": "Joe Bloggs",
"email": "joe@bloggs.com",
"supplier_id": 1,
"title": "First Supplier",
"code": "firstsupplier"
},
{
"id": 7,
"name": "Paul",
"email": "paul@hotmail.com",
"supplier_id": 1,
"title": "First Supplier",
"code": "firstsupplier"
},
{
"id": 7,
"name": "Paul",
"email": "paul@hotmail.com",
"supplier_id": 3,
"title": "New Supplier",
"code": "new"
},
{
"id": 7,
"name": "Paul",
"email": "paul@hotmail.com",
"supplier_id": 4,
"title": "PC supplier 3",
"code": "PC03"
},
{
"id": 8,
"name": "John Doe",
"email": "john@doe.com",
"supplier_id": 1,
"title": "First Supplier",
"code": "firstsupplier"
}
]
}
Я хочу изменить его так, чтобы он выглядел так:
{
"customers": [
{
"id": 6,
"name": "Joe Bloggs",
"email": "joe@bloggs.com",
"suppliers": [
{
"supplier_id": 1,
"title": "First Supplier",
"code": "firstsupplier"
}
]
},
{
"id": 7,
"name": "Paul",
"email": "paul@hotmail.com",
"suppliers": [
{
"supplier_id": 1,
"title": "First Supplier",
"code": "firstsupplier"
},
{
"supplier_id": 3,
"title": "New Supplier",
"code": "new"
},
{
"supplier_id": 4,
"title": "PC supplier 3",
"code": "PC03"
}
]
},
{
"id": 8,
"name": "John Doe",
"email": "john@doe.com",
"suppliers": [
{
"supplier_id": 1,
"title": "First Supplier",
"code": "firstsupplier"
}
]
}
]
}
Мне удалось получить части этогоработать индивидуально, но я не могу заставить все это работать в одной функции.
Например, я могу создать массив suppliers
, но в случае идентификатора клиента 7 в списке появляется только один поставщик.массив.
let customers = await query.offset(offset).limit(limit);
customers = customers.reduce((accumulator, item) => {
if (accumulator[item.id]) {
const group = accumulator[item.id];
group.suppliers = [];
group.suppliers.push({
id: item.supplier_id,
code: item.code,
title: item.title
});
} else {
accumulator[item.id] = item;
accumulator[item.id].suppliers = [];
accumulator[item.id].suppliers.push({
id: item.supplier_id,
code: item.code,
title: item.title
});
delete accumulator[item.id].supplier_id;
delete accumulator[item.id].code;
delete accumulator[item.id].title;
}
return accumulator;
}, {});
То, что у меня есть, также выглядит довольно громоздким.Как получить результат, который я ищу, в функции очистки?