我有两个字符串数组(总是包含字符串值)
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;
}
}
答案 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);
}