match/consolidate 两个具有关系的数据数组的最简单方法是什么?

What is the easiest way to match/consolidate two arrays of data that have relationships?

假设我有两个用于票务活动的数据数组。一位是与会者:

[
{name: 'Jack', ticket_code: 'iGh4rT'},
{name: 'Lisa', ticket_code: 'it1ErB'}
]

另一个是门票:

[
{code: 'iGh4rT', name: 'General Admission'},
{code: 'it1ErB', name: 'VIP'}
]

现在假设我想像这样显示 table:

姓名 票名
杰克 普通录取
丽莎 贵宾

我正在努力有效地做到这一点。我可以用一个数组显示 table 没问题,像这样:

    for (let i = 0; i < attendees.length; i++){
        const row = `<tr>
                        <td>${attendees[i].name}</td>
                        <td>${attendees[i].ticket_code}</td>
                    </tr>`
    document.getElementById('TableBody').innerHTML += row

我需要以某种方式 'query' 门票数组与来自特定人员的与会者数组的代码,获取门票名称,并替换门票名称而不是代码。

使用 SQL 这样的事情很容易,但是是否能够“查询”数组并获得特定的 属性?我应该用所需的信息构建一个全新的数组吗?适用于大型无序数据集的最佳方法是什么?

您可以将其中一个数组作为对象,并将代码作为对象的键,并将另一个数组与所需数据和对象中先前存储的数据进行映射。

const
    attendees = [{ name: 'Jack', ticket_code: 'iGh4rT' }, { name: 'Lisa', ticket_code: 'it1ErB' }],
    tickets = [{ code: 'iGh4rT', name: 'General Admission' }, { code: 'it1ErB', name: 'VIP' }],
    ticketsByCode = Object.fromEntries(tickets.map(o => [o.code, o])),
    table = attendees.map(({ name, ticket_code }) => [name, ticketsByCode [ticket_code].name]);

console.log(table);

试试这个:

let a = [
  {name: 'Jack', ticket_code: 'iGh4rT'},
  {name: 'Lisa', ticket_code: 'it1ErB'}
];

let b = [
  {code: 'iGh4rT', name: 'General Admission'},
  {code: 'it1ErB', name: 'VIP'}
];

let c = b.map(item => {
    return {
        tiketName: item.name,
        ...a.find(itemA => itemA.ticket_code == item.code)
    }
});

console.log(c);