2017-10-17 43 views
1

对象的两个数组在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方法,但将删除约会对象的属性。

回答

2

执行以下操作:

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

,而不是'名称:p.name'末,你可以使用'... p'病人的所有道具合并。 –

+0

@BrianGlaz当然!我已经改变了答案,谢谢 – dhilt

+0

我会倾向于交换'病人'和'约会',所以结果是1:1映射到约会的问题问:p –