Symmetric difference wiki
需要求数组的对称差。
我写了一个用于比较两个数组的函数,其中我将数组合并为一个并在循环中查找重复值。当我找到它时,我会删除它。
function sym() {
var args = Array.prototype.slice.call(arguments);
var result = compareTwoArray(arguments[0], arguments[1]);
if (arguments.length > 2) {
for (var i = 2; i < arguments.length; i++) {
// console.log('result = ' + result);
result = compareTwoArray(result, arguments[i]);
}
}
return result;
}
function compareTwoArray() {
var args = Array.prototype.slice.call(arguments);
var result = [];
var newArr = args.reduce(function(prev, curr) {
return prev.concat(curr);
})
for (var i = 0; i < newArr.length; i++) {
var count = 0;
for (var j = i+1; j < newArr.length; j++) {
if (newArr[i] === newArr[j]) {
count += 1;
newArr.splice(j, 1);
j -= 1;
}
}
if (count === 0) {
result.push(newArr[i]);
}
}
return result;
}
console.log(sym([1, 2, 3], [3, 1, 5]));
// [2, 5]
console.log(sym([1, 1, 3], [4, 6]));
// [1, 3, 4, 6]
console.log(sym([1, 1, 2, 5], [2, 2, 3, 5]));
// [1, 3]
console.log(sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5]));
// [1, 4, 5]
console.log(sym([1, 2, 5], [2, 3, 5], [3, 4, 5]));
// [1, 4, 5]
不知道如何处理重复值。
在一种情况下,它必须被删除。
[1, 2, 3]
[3, 1, 5]
[2, 5] - должен получиться
[2, 5] - получается с моим кодом
留在另一个。
[1, 1, 3]
[4, 6]
[1, 3, 4, 6] - должен получиться
[3, 4, 6] - получается с моим кодом
在另一个中保留(1)和删除(2)。
[1, 1, 2, 5]
[2, 2, 3, 5]
[1, 3] - должен получиться
[3] - получается с моим кодом
Javascript 有一个类 Set,在这种情况下可以用作集合,结果,条目将几乎根据公式得出
下面的示例使用了扩展运算符和其余参数
两个数组的解决方案。虽然可以逐步处理 3 个或更多数组:首先是前两个,然后是第一个处理的结果和第三个数组,依此类推。
或者,您也可以这样做:
根据描述:
这是两个集合的示例(扭曲更多集合,我想你可以猜到如何):