我需要编写一个函数,它可以接受包含整数的不确定的数组数,它应该返回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],因此此时需要使用下一个数组和累加器来执行整个操作,这就是我被困在这里的地方。
发布于 2022-05-31 18:54:32
您正在将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]))
https://stackoverflow.com/questions/72452670
复制相似问题