牛客网刷题28-根据包名,在指定空间中创建对象

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

题目链接

https://www.nowcoder.com/practice/a82e035501504cedbe881d08c824a381?tpId=2&&tqId=10854&rp=1&ru=/activity/oj&qru=/ta/front-end/question-ranking

题目描述

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

输入描述:

namespace({a: {test: 1, b: 2}}, 'a.b.c.d')

输出描述:

{a: {test: 1, b: {c: {d: {}}}}}

重点难点

  1. 理解题目,题目中包名指的是:a.b.c.d,用.分割代表着层级关系,我理解是:a的b属性,b的c属性,c的d属性。
  2. hasOwnProperty方法的使用

题目分析

  1. 用.分割字符串,取出包名;
  2. 保留对原始对象的引用:把原对象:{a: {test: 1, b: 2}} 浅拷贝给 一个新的对象newName。
  3. 用hasOwnProperty方法判断空间名是否在对象中;
  4. 若不在建立此空间名属性,赋值为空;
  5. 将指针指向下一个空间名属性。
function namespace(oNamespace, sPackage) {
    var package = sPackage.split('.');
    var newName = oNamespace;   // 保留对原始对象的引用
    for(var i=0;i<package.length;i++){
        if(!newName.hasOwnProperty(package[i])){    // 空间名不在对象中,建立此空间名属性,赋值为空
            newName[package[i]] = {};
            newName = newName[package[i]];  // 将指针指向下一个空间名属性
        }
    }
   return oNamespace;
}

  

posted @ 2020-02-28 21:36  刘欣lx  阅读(262)  评论(2编辑  收藏  举报