lodash源码分析之intersection

本文为读 lodash 源码的第四十六篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash

gitbook也会同步仓库的更新,gitbook地址:pocket-lodash

依赖

import map from './map.js'
import baseIntersection from './.internal/baseIntersection.js'
import castArrayLikeObject from './.internal/castArrayLikeObject.js'

《lodash源码分析之map的实现》

《lodash源码分析之baseIntersection》

《lodash源码分析之castArrayLikeObject》

源码分析

intersection 的作用是找到传入数组的交集,它的功能单一,内部调用 baseIntersection 来实现。

function intersection(...arrays) {
  const mapped = map(arrays, castArrayLikeObject)
  return (mapped.length && mapped[0] === arrays[0])
    ? baseIntersection(mapped)
    : []
}

第一句 const mapped = map(arrays, castArrayLikeObject) 先将参数作一下合规化检测。

接下来的判断条件比较有趣,如果 mapped.length0 则返回空数组,这比较好理解,传入的参数为空,肯定也没有交集。

接下来是 mapped[0] === arrays[0] ,为什么要判断 mapped 的第一项和原来的 arrays 的第一项是否相等呢?在合规性检测中,castArrayLikeObject 如果检测到数据不合规的时候会返回空数组,如果第一项就不合规,那返回的是空数组,那肯定会没有交集,因此可以直接返回空数组。

如果满足条件,则调用 baseIntersection 找到交集。

License

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

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

作者:对角另一面

results matching ""

    No results matching ""