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 的第三个参数 predicateisArrayLikeObject ,表示只有数组或者类数组才会通过检测,第四个参数 isStricttrue ,表示没有通过 predicate 检测的参数会被直接舍弃掉。

例如这样调用:

union([2, 3], 1, [1, 2])

因为第二个参数不是数组,会被直接舍弃掉。

在将 arrays 拍平后,调用 baseUniq 去重,即可实现合并和去重的功能

License

署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)

最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:

作者:对角另一面

results matching ""

    No results matching ""