本文为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循环,直到 object为 null或者 到达了路径末尾(即 index 等于 length)。
在每次循环中,使用 toKey函数将路径中的当前键转换成字符串键,并从 object中获取对应值。
最后,检查索引 index是否等于 path参数长度。
如果是(意味着成功遍历了整个路径),则返回 obejct,
否则返回undefined()。