两个数组的差异有1000万个项目 - _.difference太慢了

use*_*226 5 javascript node.js underscore.js

我有两个用户ID的数组,我想检查其中的不同项目.

arr1 = [123, 456, 789];
arr2 = [123, 456, 789, 098];
Run Code Online (Sandbox Code Playgroud)

问题是:这些阵列可能有10或2千万个项目.

我正在尝试,underscore.difference()但需要10分钟才能完成.

有没有更快的方法来做到这一点?

juv*_*ian 2

这认为数组中没有数字 0 或 1:

var arr1 = [123, 456, 789,3],
    arr2 = [123, 456, 789, 098],    
    has = {},
    different=[],
    length1=arr1.length,
    length2=arr2.length;



for(var i=0;i<length1;i++){
        has[arr1[i]]=true;
}
for(var i=0;i<length2;i++){
    var val=arr2[i];
    if(has[val] === undefined){
       has[val]=val;
    }
    else{
        if(has[val]!=val){
            has[val]=false;
        }
   }
}
for(var i in has){
    if (has[i]) different.push(i);
}
Run Code Online (Sandbox Code Playgroud)

如果您还想检查 0 和 1:

for(var i=0;i<length1;i++){
    has[arr1[i]]=NaN;
}
for(var i=0;i<length2;i++){
    var val=arr2[i];
    if(has[val] === undefined){
        has[val]=null;
    }
    else{
        if(has[val]!=null){
            has[val]=true;
        }
    }
}
for(var i in has){
    if (!has[i]) different.push(i);
}
Run Code Online (Sandbox Code Playgroud)