找出循环中的对称差异
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]
,所以此时整个操作需要对下一个数组和累加器进行,这就是我卡在的地方。
您正在使用 i
从 0
迭代到 arr.length - 1
。 arr[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]))
我需要编写一个函数,它可以接受不定数量的包含整数的数组,它应该 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]
,所以此时整个操作需要对下一个数组和累加器进行,这就是我卡在的地方。
您正在使用 i
从 0
迭代到 arr.length - 1
。 arr[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]))