为了账号安全,请及时绑定邮箱和手机立即绑定

javascript 将多个JSON对象合并成一个(带子父关系)

javascript 将多个JSON对象合并成一个(带子父关系)

慕姐4208626 2018-11-28 14:13:41
1、目前有一个很任性的接口API,它提供的数据非常不合理2、数据如下3、我想将它们合并成一个json如下:是否有好的办法?
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

额,就是不想写循环


let json2Obj = json2.reduce((acc, cur) => {

    let childId = cur.childId;

    if (!acc[childId]) {

        acc[childId] = [];

    }

    acc[childId].push(cur);

    return acc;

}, {})


json1.forEach(item => {

    item.childchild = json2Obj[item.childId]

})


let json1Obj = json1.reduce((acc, cur) => {

    let mainId = cur.mainId;

    if (!acc[mainId]) {

        acc[mainId] = [];

    }

    acc[mainId].push(cur);

    return acc;

}, {})


json.forEach(item => {

    item.child = json1Obj[item.mainId];

})


console.log(JSON.stringify(json));

reduce重构下:


const toObj = (json, idStr) => json.reduce((acc, cur) => {

    let id = cur[idStr];

    if (!acc[id]) {

        acc[id] = [];

    }

    acc[id].push(cur);

    return acc;

}, {})


const json2Obj = toObj(json2, 'childId');

json1.forEach(item => item.childchild = json2Obj[item.childId])

const json1Obj = toObj(json1, 'mainId');

json.forEach(item => item.child = json1Obj[item.mainId])


console.log(JSON.stringify(json));


查看完整回答
反对 回复 2018-12-28
  • 1 回答
  • 0 关注
  • 877 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号