Javascript 使用节点js过滤大型阵列

Javascript 使用节点js过滤大型阵列,javascript,node.js,arrays,algorithm,Javascript,Node.js,Arrays,Algorithm,我有两个大型数组,其中填充的字符串都包含>150.000个元素 const allNew = allArrayOneValues.filter(val => !allArrayTwoValues.includes(val)); 我需要比较这两个数组,找出哪些元素还不在ArrayTwo中,或者找出哪些元素要从ArrayTwo中删除,因为它们不再在ArrayOne中 在这里过滤大约需要3到5分钟。。。有没有一种方法比找出ArrayOne中哪些值还不在ArrayT2中或者哪些值在ArrayT2

我有两个大型数组,其中填充的字符串都包含>150.000个元素

const allNew = allArrayOneValues.filter(val => !allArrayTwoValues.includes(val));
我需要比较这两个数组,找出哪些元素还不在ArrayTwo中,或者找出哪些元素要从ArrayTwo中删除,因为它们不再在ArrayOne中

在这里过滤大约需要3到5分钟。。。有没有一种方法比找出ArrayOne中哪些值还不在ArrayT2中或者哪些值在ArrayT2中而哪些值不在ArrayOne中更有效

谢谢
托马斯

使用
设置
对象
可能是一个不错的选择。以下是一个例子:

//将AllArrayTwo值转换为对象。
const tmp=allArrayTwoValues.reduce((prev,item)=>{prev[item]=true;返回prev;},{});
//过滤值不在allArrayTwoValues中

const allNew=allArrayOneValues.filter(item=>!tmp[item])您当前的算法是O(m*n)(其中m=第一个数组的长度,n=第二个数组的长度)

使用一种可以进行次线性查找的高效数据结构,至少可以在O(m*lg(n))中实现这一点

因此,对于150000个元素,它的速度将提高10000倍,并且应该需要几毫秒而不是几分钟

让allArrayOneValues=[1,2,4]
让allArrayTwoValues=[3,9,2]
设hash=newset();
allArrayTwoValues.forEach((值)=>{
hash.add(值)
})
const allNew=allArrayOneValues.filter(val=>!hash.has(val));

console.log(allNew)
数组是否已排序?您是否尝试过使用
Set
或对象?不,它们包含随机值,如1#4#5和7#9#100等。。。我没有看过集合yetsorted Means和升序或降序值,不一定是随机值。这是一个算法问题,因为你使用的是暴力方法,这需要很长时间。请说明数据是否具有任何特殊属性(排序值、所有唯一值/具有重复值、可能的最小值和最大值等),以便我们提供最佳解决方案。您是否可以添加有关此工作方式/原因的更多详细信息我也不明白这将如何工作。在ArrayTwo中,我需要添加ArrayOne中缺少的值。除此之外,我需要找出哪些值存在于ArrayTwo中,而这些值不再存在于ArrayOne中(可能已从ArrayOne中删除的元素)-这样,在这两次比较之后,我可以向ArrayTwo添加元素并删除某些元素,然后ArrayTwo将匹配ArrayOne@thomas嗨,我已经更新了代码。该代码仅过滤不在arrayTwo中的值。需要做更多类似的事情。太棒了,谢谢@Sachin,这绝对是公认的答案,只需一秒钟而不是几分钟!