记一道有意思的题:浅拷贝的应用

题目
在这里插入图片描述
自己琢磨半天用递归写了个版本,思路就是把每个属性按照命名空间展开

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为指针一步步修改原对象的内层值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值