Соедините два массива для MatTableDataSource - Angular / TS - PullRequest
0 голосов
/ 11 марта 2019

У меня есть два объекта

Client = [id, name]
Order = [id, clientId]

У меня есть массив заказов, и я хочу отобразить их в матричной таблице.Я все установил и запустил (таким образом, отобразите ID и ClientID), но как я могу объединить мой ClientID из Заказа в с моим Клиентом, чтобы я мог отобразить настоящее имя?

Я не смог ничего найти.Возможно, не гуглил правильную вещь и не мог придумать идею для этой простой задачи!

С наилучшими пожеланиями!

1 Ответ

0 голосов
/ 11 марта 2019

Вы можете просто сгруппировать ваши заказы по 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 });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...