We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
本文为读 lodash 源码的第二百四十七篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash
gitbook也会同步仓库的更新,gitbook地址:pocket-lodash
import copyArray from './.internal/copyArray.js' import getTag from './.internal/getTag.js' import isArrayLike from './isArrayLike.js' import isString from './isString.js' import iteratorToArray from './.internal/iteratorToArray.js' import mapToArray from './.internal/mapToArray.js' import setToArray from './.internal/setToArray.js' import stringToArray from './.internal/stringToArray.js' import values from './values.js'
《lodash源码分析之copyArray》
《lodash源码分析之getTag》
《lodash源码分析之isArrayLike》
《lodash源码分析之isString》
《lodash源码分析之iteratorToArray》
《lodash源码分析之mapToArray》
《lodash源码分析之setToArray》
《lodash源码分析之stringToArray》
《lodash源码分析之values》
toArray 的作用是将 value 转换成数组。
toArray
value
const mapTag = '[object Map]' const setTag = '[object Set]' const symIterator = Symbol.iterator
将 Map 和 Set 的 Tag 保存,方便后续使用。
Map
Set
Tag
也将 Symbol.iterator 保存,优化性能。
Symbol.iterator
if (!value) { return [] }
如果传入的 value 为假值,则返回一个空数组。
类数组包括字符串和其它类数组,其中字符串是分开处理的。
if (isArrayLike(value)) { return isString(value) ? stringToArray(value) : copyArray(value) }
可以看到,如果是字符串,则使用 stringToArray 来转换。
stringToArray
如果是其它的类数组,则使用 copyArray 将原来的数组复制一次即可。
copyArray
if (symIterator && value[symIterator]) { return iteratorToArray(value[symIterator]()) }
如果在支持迭代器的环境中,并且 value 中又有迭代器,则使用 iteratorToArray 转换。
iteratorToArray
const tag = getTag(value) const func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values) return func(value)
通过 getTag 函数获取到 value 的 tag 。
getTag
tag
如果是 Map 类型,则使用 mapToArray 转换。
mapToArray
如果是 Set 类型,则使用 setToArray 转换。
setToArray
其它类型,都作为对象看待,使用 values 方法转换。
values
署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)
最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:
作者:对角另一面
The text was updated successfully, but these errors were encountered:
No branches or pull requests
本文为读 lodash 源码的第二百四十七篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash
gitbook也会同步仓库的更新,gitbook地址:pocket-lodash
依赖
《lodash源码分析之copyArray》
《lodash源码分析之getTag》
《lodash源码分析之isArrayLike》
《lodash源码分析之isString》
《lodash源码分析之iteratorToArray》
《lodash源码分析之mapToArray》
《lodash源码分析之setToArray》
《lodash源码分析之stringToArray》
《lodash源码分析之values》
源码分析
toArray
的作用是将value
转换成数组。一些常量
将
Map
和Set
的Tag
保存,方便后续使用。也将
Symbol.iterator
保存,优化性能。假值
如果传入的
value
为假值,则返回一个空数组。类数组
类数组包括字符串和其它类数组,其中字符串是分开处理的。
可以看到,如果是字符串,则使用
stringToArray
来转换。如果是其它的类数组,则使用
copyArray
将原来的数组复制一次即可。迭代器
如果在支持迭代器的环境中,并且
value
中又有迭代器,则使用iteratorToArray
转换。其它类型
通过
getTag
函数获取到value
的tag
。如果是
Map
类型,则使用mapToArray
转换。如果是
Set
类型,则使用setToArray
转换。其它类型,都作为对象看待,使用
values
方法转换。License
署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)
最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:
作者:对角另一面
The text was updated successfully, but these errors were encountered: