javascript - 从后台接收到的一组数据,如何在前端整合成一个关系型的json对象?
本文介绍了javascript - 从后台接收到的一组数据,如何在前端整合成一个关系型的json对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我从后台接受到一组数据,格式大致如下:
[
{
"name":"101",//房间号,表示1楼1号房
"floor":"1-1",//楼层号,表示1单元1楼
"unit":"1",//单元号,表示1单元
"buildId":"1#"//楼栋id,表示1号楼
},
{
"name":"102",
"floor":"1-1",
"unit":"1",
"buildId":"1#"
},
{
"name":"201",
"floor":"1-2",
"unit":"1",
"buildId":"1#"
},
{
"name":"202", //房间号,表示2楼2号房
"floor":"1-2",//楼层号,表示1单元2楼
"unit":"1",
"buildId":"1#"
},
{
"name":"101",//房间号,表示1楼1号房
"floor":"2-1",//楼层号,表示2单元1楼
"unit":"2",//单元号,表示2单元
"buildId":"1#"
},
{
"name":"101",//房间号,表示2楼1号房
"floor":"2-2",//楼层号,表示2单元2楼
"unit":"2",//单元号,表示2单元
"buildId":"1#"
},"..."
]
这组数据中,对应关系就是floor、unit、buildId,大致意思就是,一栋楼包含几个单元,每个单元包含几个楼层,每层楼包含几户
{
"buildId":"1#",//1号楼
"unit":[
{
"id":"1",//1单元
"floor":[
{
"id":"1-1",//1单元1楼
"room":[
{
"name":"101",//房间号,表示所属1楼1号房
"floor":"1-1",//楼层号,表示所属1单元1楼
"unit":"1",//单元号,表示所属1单元
"buildId":"1#"//楼栋id,表示所属1号楼
},
{
"name":"102",
"floor":"1-1",
"unit":"1",
"buildId":"1#"
},
]
},
{
"id":"1-2",//1单元2楼
"room":[
"..."
]
}
]
},
{
"id":"2",//2单元
"floor":[
"..."
]
}
]
}
最终重构成这样的关系型结构,整合成一个单独的json对象,前端用js应该如何写来处理呢?
解决方案
这边的代码使用TypeScript写的,这里给出的是编译出来之后的javascript,原代码见gist
let data = [
{
"name": "101",
"floor": "1-1",
"unit": "1",
"buildId": "1#" //楼栋id,表示1号楼
},
{
"name": "102",
"floor": "1-1",
"unit": "1",
"buildId": "1#"
},
{
"name": "201",
"floor": "1-2",
"unit": "1",
"buildId": "1#"
},
{
"name": "202",
"floor": "1-2",
"unit": "1",
"buildId": "1#"
},
{
"name": "101",
"floor": "2-1",
"unit": "2",
"buildId": "1#"
},
{
"name": "101",
"floor": "2-2",
"unit": "2",
"buildId": "1#"
}];
let result = data.reduce((result, room) => {
let unit = result.unit.find(unit => unit.id == room.unit);
if (unit) {
let floor = unit.floor.find(floor => floor.id == room.floor);
if (floor) {
floor.room.push(room);
}
else {
let roomList = [];
roomList.push(room);
let floor = { id: room.floor, room: roomList };
unit.floor.push(floor);
}
}
else {
let roomList = [];
roomList.push(room);
let floorList = [];
floorList.push({ id: room.floor, room: roomList });
let unit = { id: room.unit, floor: floorList };
result.unit.push(unit);
}
return result;
}, { buildId: '1#', unit: [] });
这篇关于javascript - 从后台接收到的一组数据,如何在前端整合成一个关系型的json对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文