从后台接收到的一组数据,如何在前端整合成一个关系型的json对象?

我从后台接受到一组数据,格式大致如下:[{"name":"101",//房间号,表示1楼1号房"floor":"1-1",//楼层号,表示1单元1楼"unit":"1",... 我从后台接受到一组数据,格式大致如下:
[
{
"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":[
"..."
]
}
]
}
展开
 我来答
阿嘎洒
2016-09-07 · TA获得超过136个赞
知道小有建树答主
回答量:127
采纳率:66%
帮助的人:40.9万
展开全部
<script>
    Array.prototype.getIndex = function(id, field){
        if(!this.length || !id || !field) return -1;
        var i = 0,
            len = this.length;
        for(;i<len;i++){
            if(this[i][field] == id) return i;
        }
        return -1;
    };
    Array.prototype.getFloorObj = function(obj){
        if(!this.length || !obj) return null;
        var i = 0,
            len = this.length,
            _obj = {};
        for(;i<len;i++){
            if(this[i]["buildId"] == obj.buildId){
                obj.build_index = i;
                var j = 0,
                    l = this[i]["buildId"].unit.length;
                for(;j<l;j++){
                    if(this[i]["buildId"].unit[j]["id"] == obj["unit"]){
                        obj.unit_index = j;
                        var k = 0,
                            lg = this[i]["buildId"].unit[j]["floor"].length;
                        for(;k<lg;k++){
                            if(this[i]["buildId"].unit[j]["floor"][k]["id"] == obj["floor"]) {
                                obj.floor_index = k;
                                return obj;
                            }
                        }
                    }
                }
            }
        }
        return null;
    };
    
    var arr = [
    {
        "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#"
    }
],
    newArr = [];
    var i = 0,
        len = arr.length;
    for(;i<len;i++){        
        var _build_index = newArr.getIndex(arr[i]["buildId"],"buildId");
        if(_build_index === -1) {
            newArr.push({buildId:arr[i]["buildId"],unit:[]});
            _build_index = newArr.length - 1;
        }
        var _unit_index = newArr[_build_index]["unit"].getIndex(arr[i]["unit"],"id");
        if(_unit_index === -1){
            newArr[_build_index]["unit"].push({id:arr[i]["unit"],floor:[]});
            _unit_index = newArr[_build_index]["unit"].length - 1;
        }
        var _floor_index = newArr[_build_index]["unit"][_unit_index]["floor"].getIndex(arr[i]["floor"],"id");
        if(_floor_index === -1){
            newArr[_build_index]["unit"][_unit_index]["floor"].push({id:arr[i]["floor"],room:[]});
            _floor_index = newArr[_build_index]["unit"][_unit_index]["floor"].length - 1;
        }
        newArr[_build_index]["unit"][_unit_index]["floor"][_floor_index]["room"].push(arr[i]);
    }
    document.write(JSON.stringify(newArr));
</script>
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式