# 深层取值

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,否则中间取值会遇到undefinednull的情况,这里返回undefined

# 结论

对象层级相关的操作,例如增删查改,需要先转为数组才方便操作。

最近更新时间: 2020/9/6 11:30:38