- 现有对象如下
let obj = {a: {b:{c:{d:'Marron'}}}
}
- 想通过一个方法,输入该对象和路径a.b.c.d获取Marron的值
 【思路】:
- 首先使用split数据,将a.b.c.d变为[a, b, c, d]
- 然后使用shift()方法每次取出最前面的属性名,存放在prop中
- 新建一个res对象,让res = res[prop]
- 现假设有一函数如下:
var f = function(obj, path){let res = obj,currProp,props = path.split('.');// [a, b, c, d]while(currProp = props.shift()){res = res[currProp] }return res
}
let obj = {a: {b:{c:{d:'Marron'}}}
}
console.log(f(obj, 'a.b.c.d'))  // Marron
- 上面已经成功的实现了基本的需求.但是如果传入的路径是错误的.有可能会报错.
- 栗子:
console.log(f(obj, 'a.c.d.e'))
Uncaught TypeError: Cannot read property ‘d’ of undefined
【解决办法】:
 在进行res = res[currProp]时,首先判断res[currProp]是否为undefined:
- 若是,则return undefined
- 否则才进行下一步
- 改进后的代码如下:
    var f = function(obj, path){let res=obj,currProp,props = path.split('.');// [a, b, c, d]while(currProp = props.shift()){if(!res[currProp]){return undefined} else {res = res[currProp] }}return res
}
let obj = {a: {b:{c:{d:'Marron'}}}
}
console.log(f(obj, 'a.c.d.e'))
console.log(obj)