如何使用 JavaScript 求对称差?
How to find symmetrical difference using JavaScript?
我一直在研究一种算法,该算法将找到两个数组的对称差异(即仅在 2 个数组中的一个中的项目,而不是两个数组中的项目)。到目前为止,我已经想出了以下内容:
function diffArray(arr1, arr2) {
let newArr1 = arr1.slice();
let newArr2 = arr2.slice();
if (newArr1.length > newArr2.length) {
return newArr1.filter((item) => !(item in newArr2));
} else {
return newArr2.filter((item) => !(item in newArr1));
}
};
const result = diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
console.log(result);
但是当使用 diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5])
进行测试时,输出是 [4, 5]
而不是 [4]
。无论任一数组的最后一个值是什么,问题似乎都会发生,但我似乎无法弄清楚我的代码是什么导致了这个问题。在此先感谢您的帮助。
in
运算符检查左侧的值是否与右侧的 属性 name 匹配。
如果您想检查 属性 值 之一是否在数组中,请使用 includes
method.
function diffArray(arr1, arr2) {
let newArr1 = arr1.slice();
let newArr2 = arr2.slice();
if (newArr1.length > newArr2.length) {
return newArr1.filter((item) => !newArr2.includes(item));
} else {
return newArr2.filter((item) => !newArr1.includes(item));
}
};
const result = diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
console.log(result);
正在更新另一个条件的答案
常量结果 = diffArray([1, 2, 3, 4], [1, 2, 3, 5]);
function diffArray(arr1, arr2){
const diff1 = arr1.filter(item => !arr2.includes(item)); // if item not available, the value will be filtered
const diff2 = arr2.filter(item => !arr1.includes(item));// if item not available, the value will be filtered
return diff1.concat(diff2);
}
// const result = diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
const result = diffArray([1, 2, 3, 4], [1, 2, 3, 5]); // This condition will fail on the above code
console.log(result);
我一直在研究一种算法,该算法将找到两个数组的对称差异(即仅在 2 个数组中的一个中的项目,而不是两个数组中的项目)。到目前为止,我已经想出了以下内容:
function diffArray(arr1, arr2) {
let newArr1 = arr1.slice();
let newArr2 = arr2.slice();
if (newArr1.length > newArr2.length) {
return newArr1.filter((item) => !(item in newArr2));
} else {
return newArr2.filter((item) => !(item in newArr1));
}
};
const result = diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
console.log(result);
但是当使用 diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5])
进行测试时,输出是 [4, 5]
而不是 [4]
。无论任一数组的最后一个值是什么,问题似乎都会发生,但我似乎无法弄清楚我的代码是什么导致了这个问题。在此先感谢您的帮助。
in
运算符检查左侧的值是否与右侧的 属性 name 匹配。
如果您想检查 属性 值 之一是否在数组中,请使用 includes
method.
function diffArray(arr1, arr2) {
let newArr1 = arr1.slice();
let newArr2 = arr2.slice();
if (newArr1.length > newArr2.length) {
return newArr1.filter((item) => !newArr2.includes(item));
} else {
return newArr2.filter((item) => !newArr1.includes(item));
}
};
const result = diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
console.log(result);
正在更新另一个条件的答案
常量结果 = diffArray([1, 2, 3, 4], [1, 2, 3, 5]);
function diffArray(arr1, arr2){
const diff1 = arr1.filter(item => !arr2.includes(item)); // if item not available, the value will be filtered
const diff2 = arr2.filter(item => !arr1.includes(item));// if item not available, the value will be filtered
return diff1.concat(diff2);
}
// const result = diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
const result = diffArray([1, 2, 3, 4], [1, 2, 3, 5]); // This condition will fail on the above code
console.log(result);