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

时间:2014-04-02 20:00:09

标签: javascript arrays

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

var origArr = ['b', 'c', 'a'];
var currentArr = ['d', 'a', 'e', 'c'];

我需要两个功能:一个找到已添加的内容(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;
    }
}

1 个答案:

答案 0 :(得分:1)

试试这个:

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