我有以下代码片段,用于获取两个数组之间的差异。问题是它不适用于重复的条目,并且仅删除该条目一次,从而留下了它的副本。有人可以告诉我这个问题的解决办法吗?
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
适用于两个数组。然后只返回状态为 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;
}
关于javascript - 重复条目的数组减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24832002/