我正在尝试编写一个for循环,它通过函数的所有输入,比较输入的元素,并输出唯一的元素(在这种情况下,它们将始终是数字)。
由于这是freecodecamp exercise,我会得到一些反馈,并收到以下错误:Error: potential infinite loop at line 4.
如果我运行循环,没有无限循环保护,我就会失去记忆。有人可以指出我做错了吗?
function unite(arr1, arr2, arr3) {
//for all arrays
var output = arr1;
for(var x = 0; x < arguments.length; x++) {
for(var y = 0; y < arguments[x].length; y++) {
for(var i = 0; i < output.length; i++) {
if(arguments[x][y] !== output[i]) {
output.push(arguments[x][y]);
}
}
}
}
return output;
}
unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);
答案 0 :(得分:1)
我发现您的代码存在两个问题。
1:您在迭代时向数组中添加项目
在循环中设置output = arr1', then start walking
arr1 as part of
参数. Then you are adding items into
arr1 / output`。遍历这些附加项目并添加更多项目。
2:独特的测试存在缺陷
如果确保output
数组中的项目是唯一的,那么第一个问题可能不是那么糟糕。不幸的是,在测试输出数组中的唯一性时也存在问题。为输出数组中与其不匹配的每个条目添加当前项。如果您的输出为[1,2,3,4]
且您所比较的项目为2
,则会将其推送到输出3次,因为它与1,3或4不匹配。