1
823
结合使用
或作为
vrugtehagel
在评论中建议,您可以使用最近的
|
2
154
破坏性看起来最简单,特别是如果我们可以假设输入是排序的:
非破坏性必须更加复杂,因为我们必须跟踪指数:
|
3
45
如果您的环境支持 ECMAScript 6 Set ,一种简单而有效的方法(见规范链接):
较短,但可读性较低(也不创建附加交叉口
避新
注意,当使用集合时,您将只获得不同的值,因此
|
4
26
使用 不足之处 或 J.S.
|
5
12
我在ES6学期的贡献。一般来说,它会发现数组与作为参数提供的不定数量数组的交集。
|
6
11
只使用关联数组怎么样?
编辑:
|
7
8
@atk的原语排序数组实现的性能可以通过使用.pop而不是.shift来提高。
我使用jsper创建了一个基准: http://bit.ly/P9FrZK . 用起来快三倍。砰。 |
8
8
我推荐上述简洁的解决方案,它在大型输入上优于其他实现。如果小输入的性能很重要,请检查下面的备选方案。 备选方案和性能比较: 有关替代实现和检查,请参见以下代码段 https://jsperf.com/array-intersection-comparison 用于性能比较。
火狐53的结果:
|
9
8
使用 JQuery 以下内容:
|
10
7
像这样的东西,但测试不好。
PS:该算法只适用于数字和普通字符串,任意对象数组的交集可能不起作用。 |
11
7
对于只包含字符串或数字的数组,可以按照其他一些答案进行排序。对于任意对象数组的一般情况,我认为您不能避免这么做。下面将给出作为参数提供的任意数量数组的交集
|
12
7
使用ES2015和SETS非常短。接受类似数组的值(如字符串)并删除重复项。
|
13
5
对这里最小的一个 filter/indexOf solution ,也就是说,使用一个javascript对象在一个数组中创建一个值的索引,将把它从O(n*m)减少到“可能”的线性时间。 source1 source2
这不是最简单的解决方案(它的代码比 filter+indexOf 它也不是最快的(可能比 intersect_safe() 但似乎是一个很好的平衡。这是关于 非常 简单的一面,同时提供良好的性能,而且不需要预先排序的输入。 |
14
5
另一种索引方法可以同时处理任意数量的数组:
它只适用于可以作为字符串计算的值,您应该将它们作为数组传递,如下所示:
…但它透明地接受对象作为参数或作为要相交的任何元素(始终返回公共值数组)。示例:
编辑: 我只是注意到,从某种程度上说,这辆车有点小。 也就是说:我编写代码时认为输入数组本身不能包含重复(如示例所示)。 但如果输入数组恰好包含重复,则会产生错误的结果。示例(使用以下实现):
幸运的是,通过简单地添加二级索引,这很容易解决。即: 变化:
通过:
……和:
签署人:
完整示例:
|
15
4
|
16
4
由于对数据有一些限制,您可以在 线性的 时间! 为了 正整数 :使用数组将值映射到“已看到/未看到”布尔值。
有一种类似的技术 物体 :取一个伪键,将array1中的每个元素设置为“true”,然后在array2的元素中查找该键。完成后清理干净。
当然,您需要确保密钥以前没有出现,否则您将破坏您的数据… |
17
3
我将为我的工作做出贡献:
|
18
3
IE 9.0、Chrome、Firefox、Opera的“indexof”
|
19
3
这可能是最简单的一个, 此外 list1.filter(n=>list2.includes(n))。
|
20
2
|
21
2
ES2015的功能方法函数方法必须考虑只使用没有副作用的纯函数,每个函数只涉及单个作业。 这些限制增强了相关函数的可组合性和可重用性。
请注意,当地人
避免重复
显然从一开始就反复出现
计算任意数的交集
|
22
2
为简单起见:
效益:
缺点:
您不想将其用于3D引擎或内核工作,但是如果在基于事件的应用程序中运行它时遇到问题,那么您的设计就有更大的问题。 |
23
2
我觉得这种方法很容易理解。它在恒定时间内执行。 |
24
1
这里是 underscore.js 实施:
|
25
1
|
26
1
|
27
1
如果需要让它处理多个数组的相交:
|
28
1
相反,使用indexof也可以使用 Array.protype.includes .
|
29
1
|
30
1
自ECMA 2016以来,您可以使用:
|
eigen_enthused · 相交N宽度_桶 7 年前 |
Luecx · 减少光线跟踪时的计算 7 年前 |
Jack M · R中的三维相交(空间分析) 7 年前 |
bullbo · 圆和线之间的交点(极坐标) 8 年前 |
user3357979 · 查找阵列的二维切片的交点 9 年前 |