javascript - 与arguments.length比较时潜在的无限循环

时间:2016-02-01 14:11:08

标签: javascript for-loop

我正在尝试编写一个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]);

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不匹配。