# toPath
# Description
转化 value 为属性路径的数组 。
# Params
value
# Return
Array
# Depend
import map from './map.js'
import copyArray from './.internal/copyArray.js'
import isSymbol from './isSymbol.js'
import stringToPath from './.internal/stringToPath.js'
import toKey from './.internal/toKey.js'
map 源码分析
copyArray 源码分析
isSymbol 源码分析
stringToPath 源码分析
toKey 源码分析
# Code
function toPath(value) {
if (Array.isArray(value)) {
return map(value, toKey)
}
return isSymbol(value) ? [value] : copyArray(stringToPath(value))
}
# Analyze
- 如果传入的
value是array, 则使用map,调用toKey方法,将其转为 路径值数组返回 - 否则会判断
value是不是Symbol类型,如果是symbol,则 返回[value] - 如果不是
Symbol,则使用stringToPath将value转为数组,因为stringToPath会缓存相同字符串转换出来的结果值,因此使用copyArray赋值一份返回
# Remark
- Array.isArray() MDN (opens new window) 用于确定传递的值是否是一个 Array。
# Example
console.log(toPath(['a', 'b', 4])) // [ 'a', 'b', '4' ]
console.log(toPath('a.b[4]')) // [ 'a', 'b', '4' ]