在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ JS面試題-計算題,寫個函數(shù),把數(shù)組變成對象結(jié)構(gòu)

JS面試題-計算題,寫個函數(shù),把數(shù)組變成對象結(jié)構(gòu)

請問,下面 data數(shù)組,如何寫一個函數(shù),使 data數(shù)組變成 tree的格式結(jié)構(gòu)。
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"},
]
寫個函數(shù)變?yōu)?br>var tree = {

"1":{
    "children":{
        "2":{
            "children":{
                "4":{
                    "children":{
                        "6":{
                        
                        }
                    }
                }
            }
        }
    }
},
"3":{
    "children":{
        "5":{
            
        }
    }
}

}

回答
編輯回答
命多硬

大兄弟,你這tree完全沒有規(guī)律啊

2017年1月10日 12:50
編輯回答
心沉

實現(xiàn)了,主要考了3點:

  1. 邏輯
  2. 遞歸
  3. Object.keys()

代碼未優(yōu)化,先去吃飯了,本地測試完成

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));

2018年8月21日 22:47
編輯回答
小眼睛

實現(xiàn)是可以實現(xiàn),按上樓那種方式,不知道是不是你自己理解畫出來的tree,如果是那你應(yīng)該理解錯了,數(shù)組轉(zhuǎn)成tree,那里面的對象元素不應(yīng)該去動啊。如果題目給的就是這個樹,那當我沒說。

2018年6月7日 07:46