168  
查询码:00000666
将多个JSON对象合并成一个(带子父关系) 1、目前有一个很
作者: 朱凡 于 2020年08月01日 发布在分类 / FM组 / FM_App 下,并于 2020年08月01日 编辑

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

1、目前有一个很任性的接口API,它提供的数据非常不合理
2、数据如下

var json = [{  "mainId": 1,  "title": "abc",  "createdate": "2017-06-28"
}, {  "mainId": 2,  "title": "ddddd",  "createdate": "2017-06-25"
}];
var json1 = [{  "childId": 1,  "mainId": 1,  "childname": "cname"
}, {  "childId": 2,  "mainId": 1,  "childname": "cname2"
}, {  "childId": 3,  "mainId": 2,  "childname": "cname3"
}, {  "childId": 4,  "mainId": 2,  "childname": "cname4"
}];
var json2 = [{  "childchildId": 1,  "childId": 1,  "childname": "cname"
}, {  "childchildId": 2,  "childId": 1,  "childname": "cname2"
}, {  "childchildId": 3,  "childId": 2,  "childname": "cname3"
}, {  "childchildId": 4,  "childId": 2,  "childname": "cname4"
}, {  "childchildId": 5,  "childId": 3,  "childname": "cname" }, {  "childchildId": 6,  "childId": 3,  "childname": "cname2"
}, {  "childchildId": 7,  "childId": 4,  "childname": "cname3"
}, {  "childchildId": 8,  "childId": 4,  "childname": "cname4"
}];
3、我想将它们合并成一个json如下:


var result = [{
			"mainId": 1,
			"title": "abc",
			"createdate": "2017-06-28",
			child: [{
				"childId": 1,
				"mainId": 1,
				"childname": "cname",
				childchild: [{
					"childchildId": 1,
					"childId": 1,
					"childname": "cname"  }, {
					"childchildId": 2,
					"childId": 1,
					"childname": "cname2"
				}]
			}, {
				"childId": 2,
				"mainId": 1,
				"childname": "cname2",
				childchild: [{
					"childchildId": 3,
					"childId": 2,
					"childname": "cname3"
				}, {
					"childchildId": 4,
					"childId": 2,
					"childname": "cname4"
				}]
			}]
方式一
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)); 





 推荐知识

 历史版本

修改日期 修改人 备注
2020-08-01 18:09:24[当前版本] 朱凡 创建版本

  目录
    知识分享平台 -V 4.8.7 -wcp