# 深层取值
function baseGet(object, path) {
path = castPath(path, object);
let index = 0;
const length = path.length;
while (object != null && index < length) {
object = object[toKey(path[index++])];
}
return (index && index == length) ? object : undefined;
}
// 实例
baseGet({a: {b: 'test'}, 'a.b'); // 寻找a.b的内容
// test
面试常考题。
首先将属性路径转换为类似['a', 'b', 'c']
路径数组。
然后循环数组,从object
一层一层的取值。
如果最后index == length
,则表明已经取到了指定的层级,直接返回取到的值object
,否则中间取值会遇到undefined
或null
的情况,这里返回undefined
。
# 结论
对象层级相关的操作,例如增删查改,需要先转为数组才方便操作。