根據包名,在指定空間中建立物件

weixin_33912246發表於2017-12-22
詳細描述:

輸入:namespace({a: {test: 1, b: 2}}, 'a.b.c.d')
輸出:{a: {test: 1, b: {c: {d: {}}}}}

function namespace(oNamespace, sPackage) {
    var str = sPackage;
    var arr = str.split('.');
    var len = arr.length;

    // {arr[0]:{text1,arr[1]:{arr[2]:{arr[3]:{}}}}}
    var obj = oNamespace; //保留對原始物件的引用

    for(var i = 0; i < len; i++){
        if(arr[i] in oNamespace){ //空間名在物件中
            if(typeof oNamespace[arr[i]] != 'object'){ //為原始值
                oNamespace[arr[i]] = {}; //將此屬性設定為空物件
            }
        }else{  //空間名不在物件中,建立此屬性,賦值為空
            oNamespace[arr[i]] = {};
        }

        oNamespace = oNamespace[arr[i]];
    }
    return obj;
}

相關文章