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 a[a2[i]];
        else a[a2[i]]=true;
    for(var k in a)
        diff.push(+k);
    return diff;
}

最佳答案

给他们一个状态。 1 仅适用于第一个数组,2 仅适用于第二个数组,3 适用于两个数组。然后只返回状态为 12 的:

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;
}

关于javascript - 重复条目的数组减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24832002/

相关文章:

javascript - 单击浏览器的后退按钮时重定向到特定页面

javascript - Raspberry Pi - JavaScript 在 chromium kiosk 模式下不起作用

javascript - 从 Axios React 排序数组

javascript - 如何在插件(滚动条插件)中计算滚动条宽度?

javascript - 如何在 d3 js 中将选定的节点置于前面?

JavaScript:是否提升了属性函数?

javascript - 循环包含对象数组的 JSON 对象

javascript - 如何禁用 $ ('#bootstrap-table' 中的选定字段)

javascript - 在 eval 的参数中转义

javascript - 添加相同规则的多个字段