SOURCE

var list = [];
var res = [];
function setList() {
    for (var s in data) {
        var ori = data[s];
        var obj = {};
        obj.topparId = ori.顶级对象ID;
        obj.parId = ori.父对象ID;
        obj.id = ori.对象ID;
        obj.空间 = "主卧";
        obj.产品名称 = ori.名称;
        obj.产品型号 = "";
        obj.对方货号 = ori.对接JSON;   //以此对方货号;匹配MIS系统全局的产品资料;对方货号建立规则见说明
        obj.基材 = ori.材质分类;
        obj.面材 = ori.材质;
        obj.特殊说明 = "";
        obj.宽 = ori.宽;
        obj.高 = ori.高;
        obj.厚 = ori.深;
        obj.块数 = ori.部件数量;
        obj.数量 = ori.计价数量;
        obj.单位 = ori.单位;
        obj.单价 = ori.单价;
        obj.开孔 = "";
        data[s] = obj;
    }
    var listmap = {};
    for (var s in data) {
        var obj = data[s];
        var id = obj.id;
        listmap[id] = obj;
    }
    for (var s in data) {
        var obj = data[s];
        var id = obj.id;
        var upId = obj.parId;
        var topparId = obj.topparId;
        if (upId == 0) {
            list.push(obj);
        } else {
            let parObj = listmap[upId];
            if (parObj == null) {
                // throw 111;
                parObj = listmap[topparId];

            }
            if (parObj == null) {
                list.push(obj);

            } else {
                parObj.dtls = parObj.dtls == null ? [] : parObj.dtls;
                parObj.dtls.push(obj);

            }
        }
    }
}


var 当前明细 = null;
function dealWithList(oripar, list) {

    function onAddRoot(ori) {
        if (ori.对方货号 != null && ori.对方货号 != "") {
            res.push(obj);
            当前明细 = ori;
        }
    }
    function onAddToDtl(ori) {
        if (ori.对方货号 != null && ori.对方货号 != "") {
            if (当前明细 == null) {
                onAddRoot(ori)
            } else {
                当前明细.子表行 == null ? [] : 当前明细.子表行;
                当前明细.子表行.push(ori);
            }
        }
    }

    for (var s in list) {
        if (oripar == null) {
            当前明细 = null;
        }
        var ori = list[s];
        if (parent == null) {
            onAddRoot(ori);
        } else {
            onAddToDtl(ori);
        }
        if (ori.dtls != null) {
            dealWithList(ori, ori.dtls);
        }

    }
}
setList();
//throw JSON.stringify(list);
dealWithList(null, list);
throw JSON.stringify(res);
console 命令行工具 X clear

                    
>
console