记一道有意思的题:浅拷贝的应用
程序员文章站
2024-03-17 20:34:28
...
题目
自己琢磨半天用递归写了个版本,思路就是把每个属性按照命名空间展开
function namespace(oNamespace, sPackage) {
var sub=Object.values(oNamespace)[0]
var keys=Object.keys(sub)
for(let i=0;i<keys.length;i++){
sub[keys[i]]= flat(sub,keys[i])
}
var list=sPackage.split(".")
var len=list.length
function flat(name,key){
var obj={}
var index=list.indexOf(key)
if(index==-1) return name[key]
if(index==len-1) return obj
obj[list[index+1]]=flat(name[key],list[index+1])
console.log(obj)
return obj
}
return oNamespace
}
看到一个简介版本,局的甚妙,记录一下
function namespace(oNamespace, sPackage) {
var packNameArr=sPackage.split(".");
var curObj=oNamespace;
for(var i=0;i<packNameArr.length;i++){
if(!curObj.hasOwnProperty(packNameArr[i])){
curObj[packNameArr[i]]={};
curObj=curObj[packNameArr[i]];
}
}
return oNamespace;
充分利用了浅拷贝的原理,以curObj为指针一步步修改原对象的内层值