Javascript 重复项的数组减法

Javascript 重复项的数组减法,javascript,Javascript,我有下面的代码片段,我正在使用它来获得两个数组之间的差异。问题是它对重复条目不起作用,只删除一次条目,从而留下一个副本。有人能告诉我这个问题的解决办法吗 function arr_diff(a1, a2){ var a=[], diff=[]; for(var i=0;i<a1.length;i++) a[a1[i]]=true; for(var i=0;i<a2.length;i++) if(a[a2[i]]) delete

我有下面的代码片段,我正在使用它来获得两个数组之间的差异。问题是它对重复条目不起作用,只删除一次条目,从而留下一个副本。有人能告诉我这个问题的解决办法吗

function arr_diff(a1, a2){
    var a=[], diff=[];
    for(var i=0;i<a1.length;i++)
        a[a1[i]]=true;
    for(var i=0;i<a2.length;i++)
        if(a[a2[i]]) delete a[a2[i]];
        else a[a2[i]]=true;
    for(var k in a)
        diff.push(+k);
    return diff;
}
函数arr_diff(a1、a2){
变量a=[],差异=[];

对于(var i=0;i给它们一个状态。
1
仅用于第一个数组,
2
仅用于第二个数组,
3
用于两个数组。然后仅返回状态为
1
2
的数组:

function arr_diff(a1, a2) {
    var a = {}, diff = [], i, k;

    for (i = 0; i < a1.length; i++) {
        a[a1[i]] = 1;
    }

    for (i = 0; i < a2.length; i++) {
        if (typeof a[a2[i]] === "undefined") {
            a[a2[i]] = 2;
        }
        else if (a[a2[i]] === 1) {
            a[a2[i]] = 3;
        }
    }

    for (k in a) {
        if (a[k] !== 3) {
            diff.push(+k);
        }
    }

    return diff;
}
函数arr_diff(a1、a2){
变量a={},diff=[],i,k;
对于(i=0;i
嵌套多个语句时,您应该使用括号
{
}
。您尝试过吗?您可能还想检查一下,在输入失败的地方,您是否可以提供一个输入。@Mritunjay
arr_diff([1,2,3],[1,3,3])
返回
[2,3]
@DavidSherret和expected也应该是。