找出循环中的对称差异

Finding the symmetric difference in a loop

我需要编写一个函数,它可以接受不定数量的包含整数的数组,它应该 return 1 个数组,这是这些数组之间的累积对称差异。一次只比较两个数组。所以 [1, 2, 3], [3, 4, 2], [1, 5, 3] 会首先得到 [1, 4],(比较前两个数组),然后再与第三个数组比较,最后的结果是 [4, 5, 3]。我为前两个数组创建了一个循环,但我不知道如何将它变成一个实际的循环,在每个步骤上执行相同的操作。由于某种原因,使用 arr[i]arr[i + 1] 会引发错误。到目前为止,这是我的代码。

function test(...arr) {
    let accumulator;
    for (let i = 0; i < arr.length; i++) {
        let common = arr[0].filter(a => arr[1].includes(a))
        let arr0 = arr[0].filter(a => !common.includes(a))
        let arr1 = arr[1].filter(a => !common.includes(a))
        let merged = [...arr0, ...arr1]
        accumulator = merged
    }
    return accumulator
}

console.log(test([1, 2, 3], [3, 4, 2], [1, 5, 3]))

这里accumulator[1, 4],所以此时整个操作需要对下一个数组和累加器进行,这就是我卡在的地方。

您正在使用 i0 迭代到 arr.length - 1arr[i + 1] 是上次迭代中的 arr[arr.length]。这是越界的。您可以将循环条件更改为 i < arr.length - 1.

示例:

function test(...arr) {
    let accumulator;
    for (let i = 0; i < arr.length - 1; i++) {
        let common = arr[i].filter(a => arr[i + 1].includes(a))
        let arr0 = arr[i].filter(a => !common.includes(a))
        let arr1 = arr[i + 1].filter(a => !common.includes(a))
        let merged = [...arr0, ...arr1]
        accumulator = merged
    }
    return accumulator
}

console.log(test([1, 2, 3], [3, 4, 2], [1, 5, 3]))