悠扬随风 发表于 2024-8-18 14:22:54

牛客JS题(四十三)根据包名,在指定空间中创建对象

注释很具体,直接上代码
    涉及知识点:

[*]地址引用
[*]assign
题干:
   我的答案
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <style>
      /* 填写样式 */
    </style>
</head>

<body>
    <!-- 填写标签 -->
    <script type="text/javascript">
      /**
       * 首先说明一下为什么操作的是returnObj但返回的是oNamespace,
       * 因为我们的returnObj是用于对oNamespace某个属性的地址的引用
       * 我对这个题的写法可以分为三个阶段,
       * 第一阶段,正常判断,如果当前访问的属性不是对象也就是说到头了,
       * 手动将其换成空对象{}
       * 第二阶段,借助assign函数,如若returnObj不为对象则返回值会是前面的{},这波特性卡的太six了
       * 当然得注意的是憋写反了,应该是{}写在前面当默认值
       * 第三阶段,根据=运算符特性,将其连接起来提高理解难度,漂亮!
       */
      function namespace(oNamespace, sPackage) {
      let returnObj = oNamespace;
      sPackage.split(".").forEach((element) => {
          // 第一阶段
          // typeof returnObj != "object"
          // ? (returnObj = {})
          // : (returnObj = returnObj);

          // 第二阶段
          //returnObj = Object.assign({}, returnObj);
          //returnObj = returnObj;

          // 第三阶段
          returnObj = returnObj = Object.assign(
            {},
            returnObj
          );
      });
      return oNamespace;
      }
      console.log(namespace({ a: { test: 1, b: 2 } }, "a.b.c.d"));
    </script>
</body>
</html>

   博客更新不是很实时,需要看后面内容的可以看看我的gitee堆栈
牛客JS题Gitee堆栈

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 牛客JS题(四十三)根据包名,在指定空间中创建对象