题解 | #根据包名,在指定空间中创建对象#

根据包名,在指定空间中创建对象

https://www.nowcoder.com/practice/a82e035501504cedbe881d08c824a381

清清爽爽

<!-- 填写标签 -->
    <script type="text/javascript">
        function namespace(oNamespace, sPackage) {
            // 操作中转对象
            let current = oNamespace;
            // 以.拆分结构并循环遍历
            sPackage.split(".").forEach(key => {
                // 判断当前项是否存在,不存在则创建空对象{}
                if(!current[key] || typeof current[key] !== 'object'){
                    current[key] = {}
                }
                // 每次循环完把current重置为当前对象
                current = current[key]
            })
            return oNamespace;
        }
    </script>

过程详解

解析包名:sPackage.split(".")将包名 'a.b.c.d' 拆分成层级数组 ['a', 'b', 'c', 'd']

调用函数传入的对象为:{a: { test: 1, b: 2 }}, 第一次循环时current指向的是这个地址指针

第一次循环:

key = "a"

current["a"] 存在且为对象 { test: 1, b: 2 }

重置指向 current = current["a"]进入到 下一次循环

第二次循环:

key = "b"

current["b"] 存在且为对象  b: 2 ,因为是非对象所以通过typeof current[key] !== 'object'j进入if条件重置b 为对象{}

重置指向 current = current["b"]进入到 下一次循环

第三次循环:

key = "c"

current["c"] 存在且为上一次创建的空对象  {},此时对象中不存在 "c" 则又进入if条件创建空对象 {}

重置指向 current = current["c"]进入到 下一次循环

第四次循环:

key = "d"

current["d"] 存在且为上一次创建的空对象  {},此时对象中不存在 "d" 则又进入if条件创建空对象 {}

重置指向 current = current["d"]进入到 下一次循环

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 16:06
已编辑
快手电商 后端 23k-35k
点赞 评论 收藏
分享
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
10-29 15:38
门头沟学院 Java
榕城小榕树:难道你简历里写了配送路径优化算法?
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务