如何使用 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);