欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 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为指针一步步修改原对象的内层值

相关标签: javascript