如何用JavaScript循环合并两个JSON生成目标嵌套JSON结构
解决方案:关联两个JSON生成目标结构
没问题,我来帮你搞定这个需求!咱们可以通过构建一个RowId映射表来高效关联两个数据集,避免嵌套循环的低效问题,最终生成你需要的mainJson结构。下面是完整的实现代码:
// 你的原始数据 const subJson1 = [{ "RowId": "00272727", "Rowlabel": "Ravi", "role": "team member" }]; const subJson2 = [{ "info": "room 1", "RowId": "00272727", "type": "Type01", "title": "Meet John Miller" }, { "info": "room 2", "type": "Type02", "RowId": "00272727", "title": "Meet Mitchell" }]; // 步骤1:构建RowId到人员信息的映射,同时初始化appointments数组 const personMap = {}; subJson1.forEach(person => { // 提取需要的字段,注意把Rowlabel转成name,符合目标结构 personMap[person.RowId] = { name: person.Rowlabel, role: person.role, appointments: [] // 先初始化空数组,后续添加预约 }; }); // 步骤2:遍历预约数据,关联到对应的人员 subJson2.forEach(appointment => { const person = personMap[appointment.RowId]; if (person) { // 提取预约需要的字段(去掉RowId,因为目标结构里不需要) person.appointments.push({ info: appointment.info, type: appointment.type, title: appointment.title }); } }); // 步骤3:生成最终的mainJson const mainJson = { people: Object.values(personMap) }; console.log(mainJson);
代码逻辑解释:
- 映射表构建:先用
subJson1创建一个以RowId为键的对象,这样后续查找人员的时间复杂度是O(1),比嵌套循环的O(n*m)高效得多,尤其是数据量大的时候。 - 字段转换:注意把
subJson1里的Rowlabel转换成目标结构需要的name,同时剔除不需要的RowId字段。 - 关联预约:遍历
subJson2时,通过RowId快速找到对应的人员,把预约信息(同样剔除RowId)添加到该人员的appointments数组中。 - 处理多人员场景:如果
subJson1里有多个人员对象,这段代码也能自动处理,最终people数组会包含所有关联好预约的人员。
边界情况处理:
- 如果某个
RowId在subJson1里存在但subJson2里没有对应的预约,该人员的appointments会是一个空数组,符合JSON结构规范。 - 如果
subJson2里的RowId在subJson1中找不到,这段代码会自动跳过该预约,避免报错。
内容的提问来源于stack exchange,提问作者user2644620
相关产品推荐
相关产品推荐

