【发布时间】:2016-12-06 21:58:24
【问题描述】:
我一直在寻找一种(更好的)方法来执行以下操作。取两个数组并仅返回唯一值。例如。 ['value1', 'value2'] 和 ['value2', 'value3'] 应该返回 'value1' 和 'value3'。以下似乎可行,但我想知道是否有更简单/更简洁的方法来实现相同的结果。
function diffArray(arr1, arr2) {
var newArr = arr1.filter(function(a) {
var count = 0;
arr2.forEach(function (x) {
if (x === a) {count++;}
});
if (count !== 0) {return false;}
return true;
}).concat(arr2.filter(function(b) {
var count = 0;
arr1.forEach(function(y) {
if (y === b) {count++;}
});
if (count !== 0) {return false;}
return true;
}));
return newArr;
}
console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]));
//Should return only 4.
【问题讨论】:
-
对不起那些家伙。
-
仅供参考,用于集合差异,A - B = x forall x in A,x 不在 B 中。因此,您的差异算法的语义与集合差异的语义不同。您很可能需要对称差异en.wikipedia.org/wiki/Symmetric_difference
-
我不明白为什么
[v1, v2] and [v2, v3]只返回v3?不返回[v1, v3]? -
@Fefux 你是对的。它应该返回“value1”和“value3”。已编辑帖子。
标签: javascript arrays