思路:题目意思是,a.b.c.d,即在a属性值中包含b属性,而在b属性值中又包含c属性,而在c属性值中又包含d属性,因为对象不仅可以使用obj[key],还可以使用obj.key。首先使用split方法以.分割sPackage得到属性名数组arr,然后使用tmp表示当前对象oNamespace,接着遍历arr,分别判断属性名对应的属性值是否的对象类型,如果不是则将其赋值为对象,同时将当前属性值作为下一次的对象。
function namespace(oNamespace, sPackage) { //{a: {test: 1, b: {c: {d: {}}}}} //a.b.c.d let arr=sPackage.split(".") let tmp=oNamespace for(let v of arr) { //let k of arr k是元素值 //let k in arr k是下标 //object是小写的喔! if(typeof tmp[v] !== "object") tmp[v]={} //将当前值作为下一次的遍历空间 tmp=tmp[v] } }
总结:let k of arr k是元素值,let k in arr k是下标,对象类型object是小写的喔。