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

JS面试题-计算题,写个函数,把数组变成对象结构

JS面试题-计算题,写个函数,把数组变成对象结构

沧海一幻觉 2019-02-26 13:59:28
请问,下面 data数组,如何写一个函数,使 data数组变成 tree的格式结构。var data = [{id:"2", value:"xxx"},{id:"3", value:"xxx"},{id:"4", value:"xxx"},{id:"6", value:"xxx"},{id:"5", value:"xxx"},{id:"1", value:"xxx"},]写个函数变为var tree = {"1":{    "children":{        "2":{            "children":{                "4":{                    "children":{                        "6":{                                                }                    }                }            }        }    }},"3":{    "children":{        "5":{                    }    }}}
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

实现了,主要考了3点:

  1. 逻辑

  2. 递归

  3. Object.keys()

代码未优化,先去吃饭了,本地测试完成

var data = [

    { id: "2", value: "xxx" },

    { id: "3", value: "xxx" },

    { id: "4", value: "xxx" },

    { id: "6", value: "xxx" },

    { id: "5", value: "xxx" },

    { id: "1", value: "xxx" },

];

var tree = {


    "1": {

        "children": {

            "2": {

                "children": {

                    "4": {

                        "children": {

                            "6": {


                            }

                        }

                    }

                }

            }

        }

    },

    "3": {

        "children": {

            "5": {


            }

        }

    }

};


function trans(data) {

    let dataSort = data.sort((a, b) => {

        return a.id - b.id < 0 ? -1 : 1;

    });


    let tree;


    for (let i = 0; i < dataSort.length; i++) {

        let idNum = dataSort[i].id;

        let isEven = Number(idNum) % 2 === 0;


        if (tree === undefined) {

            tree = {};

            tree[1] = {};

        } else if (isEven) {

            appendChildAttr(tree[1], idNum);

        } else {


            if (tree[3] === undefined) {

                tree[3] = {};

            }else {

                appendChildAttr(tree[3], idNum);    

            }            

            

        }


        function appendChildAttr(parNode, childrenId) {


            if (Object.keys(parNode).length === 0) {

                parNode.children = {};

                parNode.children[childrenId] = {};

            } else {

                appendChildAttr(parNode.children[Object.keys(parNode.children)[0]], childrenId);

            }


        }

    }

    return tree;

}


console.log(JSON.stringify(trans(data))===JSON.stringify(tree));


查看完整回答
反对 回复 2019-03-06
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

实现是可以实现,按上楼那种方式,不知道是不是你自己理解画出来的tree,如果是那你应该理解错了,数组转成tree,那里面的对象元素不应该去动啊。如果题目给的就是这个树,那当我没说。


查看完整回答
反对 回复 2019-03-06
  • 2 回答
  • 0 关注
  • 702 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信