Javascript 如何分别查找从数组中添加和删除的项

Javascript 如何分别查找从数组中添加和删除的项,javascript,arrays,Javascript,Arrays,我有两个字符串数组(总是包含字符串值) 我需要两个函数:一个查找已添加的(d,e)和一个查找已删除的(b)。我有一个函数可以找到所有的差异,但我不知道如何做到这一点。此外,效率也很重要,这些数组可能包含1000多个值,并且没有进行排序。最后,如果一个或两个数组都是空的,它不应该失败 function getArrayDifference(a1, a2) { var tempArr = [], diffArr = []; for (var i = 0; i <

我有两个字符串数组(总是包含字符串值)

我需要两个函数:一个查找已添加的(d,e)和一个查找已删除的(b)。我有一个函数可以找到所有的差异,但我不知道如何做到这一点。此外,效率也很重要,这些数组可能包含1000多个值,并且没有进行排序。最后,如果一个或两个数组都是空的,它不应该失败

function getArrayDifference(a1, a2) {
    var tempArr = [],
        diffArr = [];
    for (var i = 0; i < a1.length; i++) {
        tempArr[a1[i]] = true;
    }
    for (var j = 0; j < a2.length; j++) {
        if (tempArr[a2[j]]) delete tempArr[a2[j]];
        else tempArr[a2[j]] = true;
    }
    for (var k in tempArr) {
        diffArr.push(k);
        return diffArr;
    }
}
函数getArrayDifference(a1,a2){ var tempArr=[], diffArr=[]; 对于(变量i=0;i试试这个:

function arrayDiffAdded(arr1, arr2) {
    var ret = [];
    for(var i=0, l=arr2.length; i<l; ++i)
        if(!~arr1.indexOf(arr2[i]))
            ret.push(arr2[i]);
    return ret;
}
function arrayDiffRemoved(arr1, arr2) {
    return arrayDiffAdded(arr2, arr1);
}
函数arrayDiffAdded(arr1、arr2){
var-ret=[];

对于(var i=0,l=arr2.length;i)您的问题并没有明确说明您遇到了什么问题。如果您只是想找人为您编写代码,我建议您去找一位开发人员……我不知道怎么做……如果您想编写伪代码,我将对其进行编码……@trueimage
~
是最合适的。
~arr.indexOf(foo)
是一种技巧,如果
arr
包含
foo
,或者falsy
0
则给出一个真正的数字。
function arrayDiffAdded(arr1, arr2) {
    var ret = [];
    for(var i=0, l=arr2.length; i<l; ++i)
        if(!~arr1.indexOf(arr2[i]))
            ret.push(arr2[i]);
    return ret;
}
function arrayDiffRemoved(arr1, arr2) {
    return arrayDiffAdded(arr2, arr1);
}