js遞歸實現包名轉換成對應的json對象

示例:由原對象{a: {test: 1, b: 2}} 根據a.b.c.d這樣的包名轉換爲:{"a":{"test":1,"b":{"c":{"d":{}}}}} 

說明:包名有"."分隔,本身代表着層級結構,而json對象本身也是由屬性和值構成的,允許嵌套,因此現在就有一個需求,把包的描述字符串,轉換成json類型,條件是要注意到已經存在的其他屬性.本例中屬性a的值是對象,因此要保留該,只對其內容做擴展,而屬性b的值不是對象類型,因此要用對象覆蓋掉,其他不存在的屬性,要付給空對象.

本例使用遞歸實現:

function namespace(oNamespace, sPackage) {
    var obj = oNamespace;
   var  pkg = "";
    if(sPackage.indexOf(".")==-1){
		pkg = sPackage;
	}else{
		pkg = sPackage.substr(0,1);
	}
	if(pkg&&!(obj[pkg]&&obj[pkg] instanceof Object)){
		obj[pkg] = {};
	}
	if(sPackage.indexOf(".")!=-1){
		namespace(obj[pkg],sPackage.substr(2));
	}
	
    return obj;
}
測試代碼:

var obj = namespace({a: {test: 1, b: 2}}, 'a.b.c.d');
console.log(JSON.stringify(obj));

結果:

{"a":{"test":1,"b":{"c":{"d":{}}}}} 

功能是做出來了,但不用遞歸是不是也能實現呢?我現在腦子亂,不想做了,請讀者思考?



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