lodash源码分析之baseGet

87 阅读1分钟

本文为lodash源码分析的第二篇,后续会持续更新这个专题,欢迎指正。

依赖

import castPath from './castPath.js'
import toKey from './toKey.js'

源码分析

baseGet函数可以对对象或数组进行深层次取值。

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
}

首先,调用castPath函数处理path参数,目的是将path参数统一处理成数组。

其次,定义变量index作为索引,定义变量length保存path参数的长度。

接着,执行 while循环,直到 objectnull或者 到达了路径末尾(即 index 等于 length)。 在每次循环中,使用 toKey函数将路径中的当前键转换成字符串键,并从 object中获取对应值。

最后,检查索引 index是否等于 path参数长度。 如果是(意味着成功遍历了整个路径),则返回 obejct, 否则返回undefined()。