查找循环中的对称差



我需要编写一个函数,该函数可以接受不确定数量的包含整数的数组,并且它应该返回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]))

最新更新