ToB企服应用市场:ToB评测及商务社交产业平台

标题: 牛客JS题(四十三)根据包名,在指定空间中创建对象 [打印本页]

作者: 悠扬随风    时间: 2024-8-18 14:22
标题: 牛客JS题(四十三)根据包名,在指定空间中创建对象
注释很具体,直接上代码
    涉及知识点:
    题干:
   我的答案
  1. <!DOCTYPE html>
  2. <html>
  3.   <head>
  4.     <meta charset="UTF-8" />
  5.     <style>
  6.       /* 填写样式 */
  7.     </style>
  8.   </head>
  9.   <body>
  10.     <!-- 填写标签 -->
  11.     <script type="text/javascript">
  12.       /**
  13.        * 首先说明一下为什么操作的是returnObj但返回的是oNamespace,
  14.        * 因为我们的returnObj是用于对oNamespace某个属性的地址的引用
  15.        * 我对这个题的写法可以分为三个阶段,
  16.        * 第一阶段,正常判断,如果当前访问的属性不是对象也就是说到头了,
  17.        * 手动将其换成空对象{}
  18.        * 第二阶段,借助assign函数,如若returnObj[element]不为对象则返回值会是前面的{},这波特性卡的太six了
  19.        * 当然得注意的是憋写反了,应该是{}写在前面当默认值
  20.        * 第三阶段,根据=运算符特性,将其连接起来提高理解难度,漂亮!
  21.        */
  22.       function namespace(oNamespace, sPackage) {
  23.         let returnObj = oNamespace;
  24.         sPackage.split(".").forEach((element) => {
  25.           // 第一阶段
  26.           // typeof returnObj[element] != "object"
  27.           // ? (returnObj[element] = {})
  28.           // : (returnObj = returnObj[element]);
  29.           // 第二阶段
  30.           //returnObj[element] = Object.assign({}, returnObj[element]);
  31.           //returnObj = returnObj[element];
  32.           // 第三阶段
  33.           returnObj = returnObj[element] = Object.assign(
  34.             {},
  35.             returnObj[element]
  36.           );
  37.         });
  38.         return oNamespace;
  39.       }
  40.       console.log(namespace({ a: { test: 1, b: 2 } }, "a.b.c.d"));
  41.     </script>
  42.   </body>
  43. </html>
复制代码
  博客更新不是很实时,需要看后面内容的可以看看我的gitee堆栈
  牛客JS题Gitee堆栈

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4