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