首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >洛达什_.hasIntersection?

洛达什_.hasIntersection?
EN

Stack Overflow用户
提问于 2015-04-02 15:13:52
回答 2查看 807关注 0票数 4

我想知道两个或多个数组是否有公共项,但我不在乎这些项是什么。我知道霍达什有一个_.intersection方法,但我不需要它来运行每个数组的每一个项目。相反,我需要一个类似于_.hasIntersection方法的东西,一旦找到第一个常见的情况,它就会停止查看数组。房客有这样的东西吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-02 17:48:41

这种方法允许您在任意数量的数组中高效地搜索一个交集。

代码语言:javascript
复制
function hasIntersection() {
    var collections = _.rest(arguments);

    return _.some(_.first(arguments), function(item) {
        return _(collections)
            .chain()
            .map(_.ary(_.partial(_.includes, item), 1))
            .compact()
            .size()
            .isEqual(collections.length)
            .value();
    });
}

hasIntersection()函数从创建collections开始,我们希望在这些集合中寻找相交值,减去第一个值。它返回一些()的值,该值使用第一()数组参数进行迭代,对some()的回调将比较传递给该函数的所有其他数组。

这是通过包装collections和构建一个调用链来完成的。它使用链()启用显式链接,因为我们希望在链的末尾将isEqual()链接到大小()

我们将collections变量(数组的数组)映射到包括()函数。这就产生了一个布尔值数组,真正的意思是其中一个集合中有一个相交的值。下一步是使用紧凑()删除falsey值。剩下的是交叉集合的数量。

如果交叉集合的数量与collections长度相同,那么我们已经找到了一个在所有集合之间相交的值,并且可以退出。由于some()includes()的短路,这种方法是有效的。

代码语言:javascript
复制
hasIntersection([ 1, 2 ], [ 2, 3 ]);
// → true

hasIntersection([ 1, 2, 3 ], [ 2, 4, 5 ], [ 2 ]);
// → true

hasIntersection([ 1, 2 ], [ 3, 4 ], [ 5, 6 ], [ 7, 8 ]);
// → false
票数 2
EN

Stack Overflow用户

发布于 2015-04-02 15:17:04

您可以简单地使用someincludes

代码语言:javascript
复制
var hasIntersection = _.some(arr1, _.ary(_.partial(_.includes, arr2), 1));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29416454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档