JS數組轉爲對象

百度前端技術學院 第二十二天到第二十四天:JavaScript裏面的居民們 

/* 思路:
每個對象的id屬性也是一個對象,包含subMenu對象
保存id屬性的地址至a數組中
對於menuArr數組中的每一項,根據parent的id,到a數組中找到地址,爲其subMenu屬性添加值

時間複雜度O(N),空間複雜度O(N)
*/
var menuArr = [
    [1, "Area1", -1],
    [2, "Area2", -1],
    [3, "Area1-1", 1],
    [4, "Area1-2", 1],
    [5, "Area2-1", 2],
    [6, "Area2-2", 2],
    [7, "Area1-2-3", 4],
    [8, "Area2-2-1", 6],
];
function menuArrToObj(arr){
    var obj={};
    var a=[]; // 該數組保存每個菜單的地址 
    for(var i=0;i<arr.length;i++){
        id=arr[i][0];
        name=arr[i][1];
        parent=arr[i][2];

        if(parent>0){
            if(!a[parent-1]["subMenu"]){
                a[parent-1]["subMenu"]={};
            }
            a[parent-1]["subMenu"][id]={};
            a[parent-1]["subMenu"][id]["name"]=name;
            a[i]=a[parent-1]["subMenu"][id];
        }else{ // 第三個值等於-1  
            obj[id]={};
            obj[id]["name"]=name;
            a[i]=obj[id];
        }
    }
    console.log(a);
    return obj;
}
console.log(menuArrToObj(menuArr));
/*
var menuObject = {
    "1": {
        name: "Area1",
        subMenu: {
            "3": {
                name: "Area1-1"
            },
            "4": {
                name: "Area1-2",
                subMenu: {
                    "7": {
                        name: "Area1-2-3"
                    }
                }
            }
        }
    }

    ……

}
*/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章