【问题标题】:Join two arrays of objects on property [duplicate]在属性上加入两个对象数组[重复]
【发布时间】:2017-10-17 19:32:16
【问题描述】:

如果我有两个这样的表,在 MySQL 中:

appointments

appointment_id    patient_id    appointment_time
-------------------------------------------------------
1                 42            2017-10-17 08:00:00
2                 43            2017-10-17 08:30:00

patients

patient_id    name
---------------------------
42            Joe Smith
43            Sally Sue
44            Jim Bob

然后我可以像这样离开加入两个表

SELECT *
FROM appointments
LEFT JOIN patients ON appointments.patient_id = patients.patient_id

我会得到这样的结果:

appointment_id    patient_id    appointment_time       patient_id    name
----------------------------------------------------------------------------------
1                 42            2017-10-17 08:00:00    42            Joe Smith
2                 43            2017-10-17 08:30:00    43            Sally Sue

所以我的问题是,在 Javascript (ES6+) 中,如果我有两个这样的对象数组:

const appointments = [
  {
    appointmentId: 1,
    patientId: 42,
    appointmentTime: '2017-10-17 08:00:00'
  },
  {
    appointmentId: 2,
    patientId: 43,
    appointmentTime: '2017-10-17 08:30:00'
  }
];

const patients = [
  {
    patientId: 42,
    name: 'Joe Smith'
  },
  {
    patientId: 43,
    name: 'Sally Sue'
  },
  {
    patientId: 44,
    name: 'Jim Bob'
  }
];

如何根据patientId 属性将患者数组加入到约会数组中?

[
  {
    appointmentId: 1,
    patientId: 42,
    appointmentTime: '2017-10-17 08:00:00',
    name: 'Joe Smith'
  },
  {
    appointmentId: 2,
    patientId: 43,
    appointmentTime: '2017-10-17 08:30:00',
    name: 'Sally Sue'
  }
]

我知道 lodash 中有 unionBy 方法,但这会删除约会对象中的属性。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    执行以下操作:

    let result = appointments.map(a => ({...patients.find(p => a.patientId === p.patientId), ...a}));
    

    【讨论】:

    • 而不是最后的name: p.name,你可以使用...p来合并病人的所有道具。
    • @BrianGlaz 当然!我已经改变了答案,谢谢
    • 我倾向于交换 patientsappointments 所以结果是 1:1 映射到问题中要求的约会:p
    • 很好的答案,除了@JaromandaX 所述的patientsappointments 需要交换。
    • @KyleMorgan 从样本输入数据中不明显:p
    猜你喜欢
    • 2021-09-16
    • 2021-11-09
    • 2020-09-22
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多