lodash源码分析之union
本文为读 lodash 源码的第九十九篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash
gitbook也会同步仓库的更新,gitbook地址:pocket-lodash
依赖
import baseFlatten from './.internal/baseFlatten.js'
import baseUniq from './.internal/baseUniq.js'
import isArrayLikeObject from './isArrayLikeObject.js'
《lodash源码分析之baseFlatten》 《lodash源码分析之baseUniq》 《lodash源码分析之isArrayLikeObject》
源码分析
union
的作用是将多个数组合并成一个数组,并且合成的数组已经去重,而且按照传入的顺序合并。
源码如下:
function union(...arrays) {
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true))
}
union
调用按照以下的方式调用:
union([2, 3], [1, 2]) // => [2, 3, 1]
因为用 ...
解构,传入的参数会合并成一个二维数组 [[2,3], [1,2]]
,所以用 baseFlatten
先将二维数组 arrays
拍平,这就完成了合并的功能。
注意 baseFlatten
的第三个参数 predicate
为 isArrayLikeObject
,表示只有数组或者类数组才会通过检测,第四个参数 isStrict
为 true
,表示没有通过 predicate
检测的参数会被直接舍弃掉。
例如这样调用:
union([2, 3], 1, [1, 2])
因为第二个参数不是数组,会被直接舍弃掉。
在将 arrays
拍平后,调用 baseUniq
去重,即可实现合并和去重的功能
License
署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)
最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:
作者:对角另一面