题解 | #根据包名,在指定空间中创建对象#
根据包名,在指定空间中创建对象
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"]进入到 下一次循环