因此,我有一个具有两个键clinics
和invitations
的对象。我想将clinics
与invitations
关联到clinicId
:
const upcomingClinics = {
"clinics": {
"a0CW000000271LuMAI": {
"id": "a0CW000000271LuMAI",
"contact": {
"name": null,
"phone": null,
"email": null
},
"shifts": {
"teamLeads": 1,
"healthTechs": 1
}
},
"a0CW00000026gikMAA": {
"id": "a0CW00000026gikMAA",
"contact": {
"name": null,
"phone": null,
"email": null
},
"shifts": {
"teamLeads": 1,
"healthTechs": 4
}
}
},
"invitations": {
"56392": {
"id": "56392",
"clinicId": "a0CW00000026gikMAA"
},
"56393": {
"id": "56393",
"clinicId": "a0CW00000026gikMAA"
},
"56402": {
"id": "56402",
"clinicId": "a0CW00000026gikMAA"
},
"56427": {
"id": "56427",
"clinicId": "a0CW000000271LuMAI"
},
"56428": {
"id": "56428",
"clinicId": "a0CW000000271LuMAI"
}
}
}
clinics
对象的键始终与IDs
匹配。基本上,我希望该对象看起来像这样,因为它们的共同点是相同的clinicId
,我该怎么做?要向invitations
对象插入新密钥clinics
吗?:
const upcomingClinics = {
"clinics": {
"a0CW000000271LuMAI": {
"id": "a0CW000000271LuMAI",
"contact": {
"name": null,
"phone": null,
"email": null
},
"shifts": {
"teamLeads": 1,
"healthTechs": 1
}
"invitations": {
"56427": {
"id": "56427",
"clinicId": "a0CW000000271LuMAI"
},
"56428": {
"id": "56428",
"clinicId": "a0CW000000271LuMAI"
}
}
},
"a0CW00000026gikMAA": {
"id": "a0CW00000026gikMAA",
"contact": {
"name": null,
"phone": null,
"email": null
},
"shifts": {
"teamLeads": 1,
"healthTechs": 4
}
"invitations": {
"56392": {
"id": "56392",
"clinicId": "a0CW00000026gikMAA"
},
"56393": {
"id": "56393",
"clinicId": "a0CW00000026gikMAA"
},
"56402": {
"id": "56402",
"clinicId": "a0CW00000026gikMAA"
},
}
}
},
}
谢谢!
答案 0 :(得分:1)
我认为这就是您要寻找的https://jsfiddle.net/q4rt6zad/10/
Object.getOwnPropertyNames(upcomingClinics.clinics).forEach((clinicId) => {
upcomingClinics.clinics[clinicId].invitations = {};
Object.getOwnPropertyNames(upcomingClinics.invitations).forEach((id) => {
const invite = upcomingClinics.invitations[id];
if (invite.clinicId === clinicId) {
upcomingClinics.clinics[clinicId].invitations[id] = invite;
}
});
});
delete upcomingClinics.invitations;
答案 1 :(得分:1)
只需循环invitations
对象,并为每个邀请检查其诊所是否已包含在upcomingClinics
对象中,如果是,则只需将此邀请添加到其invitations
对象中,否则,在upcomingClinics
中创建新的诊所记录,然后将当前邀请插入其invitations
对象中:
let result = Object.keys(upcomingClinics.invitations).reduce(function(result, invitationId) { // for each invitationId in upcomingClinics.invitations object
let invitation = upcomingClinics.invitations[invitationId]; // get the current invitation object
let clinicId = invitation.clinicId; // get its clinicId
if(!result[clinicId]) { // if there is no record of this clinic in the result object
result[clinicId] = Object.create(upcomingClinics.clinics[clinicId]); // create one by cloning the clinic object from upcomingClinics.clinics
result[clinicId].invitations = {}; // create an object that will hold its invitations
}
result[clinicId].invitations[invitationId] = invitation; // add the current invitation to its corresponding clinic object
return result;
}, {});
示例:
const upcomingClinics = {"clinics":{"a0CW000000271LuMAI":{"id":"a0CW000000271LuMAI","contact":{"name":null,"phone":null,"email":null},"shifts":{"teamLeads":1,"healthTechs":1}},"a0CW00000026gikMAA":{"id":"a0CW00000026gikMAA","contact":{"name":null,"phone":null,"email":null},"shifts":{"teamLeads":1,"healthTechs":4}}},"invitations":{"56392":{"id":"56392","clinicId":"a0CW00000026gikMAA"},"56393":{"id":"56393","clinicId":"a0CW00000026gikMAA"},"56402":{"id":"56402","clinicId":"a0CW00000026gikMAA"},"56427":{"id":"56427","clinicId":"a0CW000000271LuMAI"},"56428":{"id":"56428","clinicId":"a0CW000000271LuMAI"}}};
let result = Object.keys(upcomingClinics.invitations).reduce(function(result, invitationId) {
let invitation = upcomingClinics.invitations[invitationId];
let clinicId = invitation.clinicId;
if(!result[clinicId]) {
result[clinicId] = Object.create(upcomingClinics.clinics[clinicId]);
result[clinicId].invitations = {};
}
result[clinicId].invitations[invitationId] = invitation;
return result;
}, {});
console.log(result);
答案 2 :(得分:1)
const clinics = {};
for (let clinicId in upcomingClinics.clinics) {
clinics[clinicId] = upcomingClinics.clinics[clinicId];
clinics[clinicId].invitations = {};
for (let invitId in upcomingClinics.invitations) {
const invitation = upcomingClinics.invitations[invitId];
if (invitation.clinicId === clinicId) {
clinics[clinicId].invitations[invitId] = invitation;
}
}
}