Вы можете просто сгруппировать ваши заказы по clientId, а затем добавить полученный массив заказов для каждого клиента к клиентскому объекту:
const clients = [
{ id: 1, name: "first" },
{ id: 2, name: "second" }
];
const orders = [
{ id: 1, clientId: 1, text: "First Order" },
{ id: 2, clientId: 2, text: "Second Order" },
{ id: 3, clientId: 1, text: "Third Order" }
];
const groupedOrders = {};
orders.forEach(order => {
if (!groupedOrders[order.clientId]) {
groupedOrders[order.clientId] = [];
}
groupedOrders[order.clientId].push(order);
});
const groupedClientsAndOrders = clients.map(client => {
return Object.assign({}, client, { orders: groupedOrders[client.id] || [] });
});
Это создаст новый массив, подобный этому:
[
{
"id": 1,
"name": "first",
"orders": [
{
"id": 1,
"clientId": 1,
"text": "First Order"
},
{
"id": 3,
"clientId": 1,
"text": "Third Order"
}
]
},
{
"id": 2,
"name": "second",
"orders": [
{
"id": 2,
"clientId": 2,
"text": "Second Order"
}
]
}
]
Если вам нужен клиент для заказа, вы также можете сделать следующее:
const clients = [
{ id: 1, name: "first" },
{ id: 2, name: "second" }
];
const orders = [
{ id: 1, clientId: 1, text: "First Order" },
{ id: 2, clientId: 2, text: "Second Order" },
{ id: 3, clientId: 1, text: "Third Order" }
];
const joinedOrders = orders.map(order => {
const client = clients.filter(c => c.id == order.id)[0];
return Object.assign({}, order, { client: client });
});