您可以按 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 });
});