52.根据包名,在指定空间中创建对象
题目链接
题目描述
根据包名,在指定空间中创建对象
输入描述:
namespace({a: {test: 1, b: 2}}, 'a.b.c.d')
输出描述:
{a: {test: 1, b: {c: {d: {}}}}}
重点难点
- 理解题目,题目中包名指的是:a.b.c.d,用.分割代表着层级关系,我理解是:a的b属性,b的c属性,c的d属性。
- hasOwnProperty方法的使用
题目分析
- 用.分割字符串,取出包名;
- 保留对原始对象的引用:把原对象:{a: {test: 1, b: 2}} 浅拷贝给 一个新的对象newName。
- 用hasOwnProperty方法判断空间名是否在对象中;
- 若不在建立此空间名属性,赋值为空;
- 将指针指向下一个空间名属性。
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; }