# 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' ]