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 baseDifference from './.internal/baseDifference.js' import baseFlatten from './.internal/baseFlatten.js' import isArrayLikeObject from './isArrayLikeObject.js' import last from './last.js'
lodash源码分析之数组的差集
lodash源码分析之baseFlatten
lodash源码分析之isArrayLikeObject
lodash源码分析之last
differenceBy 和 difference 的功能差不多,执行后,会返回一个新数组,新数组中的每一项都包含在第一个数组中,但是不包含在后面指定的数组中。
differenceBy
difference
difference 的实现分析可以查看《lodash源码分析之difference》。
differenceBy 和 difference 的唯一不同是可以指定迭代器,如果有指定迭代器,则比较的是迭代器返回的值,并不是直接比较数组中的原始值。如果没有指定迭代器,则和 difference 完成相同。
下面来看下源码:
function differenceBy(array, ...values) { let iteratee = last(values) if (isArrayLikeObject(iteratee)) { iteratee = undefined } return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), iteratee) : [] }
如果有指定迭代器,则 differenceBy 的最后一个参数必定不是数组。
因此使用 last 函数获取最后一个参数,然后使用 isArrayLikeObject 是否为类数组,如果是,则表明没有指定迭代器,将 iteratee 设置为 undefined。
last
isArrayLikeObject
iteratee
undefined
最后跟 difference 一样,依然是调用 baseDifference 来进行比较,唯一不同的是,baseDifference 会传入第三个参数 iteratee 。
baseDifference
至于 iteratee 起到怎样的作用,那就需要看《lodash源码分析之数组的差集》了。
署名-非商业性使用-禁止演绎 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源码分析之数组的差集
lodash源码分析之baseFlatten
lodash源码分析之isArrayLikeObject
lodash源码分析之last
源码分析
differenceBy
和difference
的功能差不多,执行后,会返回一个新数组,新数组中的每一项都包含在第一个数组中,但是不包含在后面指定的数组中。difference
的实现分析可以查看《lodash源码分析之difference》。differenceBy
和difference
的唯一不同是可以指定迭代器,如果有指定迭代器,则比较的是迭代器返回的值,并不是直接比较数组中的原始值。如果没有指定迭代器,则和difference
完成相同。下面来看下源码:
如果有指定迭代器,则
differenceBy
的最后一个参数必定不是数组。因此使用
last
函数获取最后一个参数,然后使用isArrayLikeObject
是否为类数组,如果是,则表明没有指定迭代器,将iteratee
设置为undefined
。最后跟
difference
一样,依然是调用baseDifference
来进行比较,唯一不同的是,baseDifference
会传入第三个参数iteratee
。至于
iteratee
起到怎样的作用,那就需要看《lodash源码分析之数组的差集》了。License
署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)
最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:
作者:对角另一面
The text was updated successfully, but these errors were encountered: