break语句在js中的用法

usage of break statement in js

我很少用'break statement'。

而且我几乎是第一次使用它来通过 Free Code Camp 测试。

我通过了它,但后来我意识到我不知道我的代码究竟是如何工作的。

下面是我的代码。

function dropElements(arr, func) {

  var copy = arr.slice();

  for(var i = 0; i < arr.length; i++) {
    if(!func(arr[i])){
      copy.shift();
    }
  }

  return copy;
}

我发现奇怪的是,我通过了以下列表中的 6 个中的 4 个而没有 'break'。

但是5号和6号,我没有休息就过了。

  1. dropElements([1, 2, 3, 4], function(n) {return n >= 3;});

  2. dropElements([1, 2, 3], function(n) {return n > 0;});

  3. dropElements([1, 2, 3, 4], function(n) {return n > 5;});

  4. dropElements([1, 2, 3, 7, 4], function(n) {return n > 3;});

  5. dropElements([0, 1, 0, 1], function(n) {return n === 1;});

    • 我的预期:[1, 0, 1] 但没有中断 [0, 1]
  6. dropElements([1, 2, 3, 9, 2], function(n) {return n > 2;})

    • 我的预期:[3, 9, 2] 但没有中断 [9, 2]

我在 chrome 控制台上尝试了您的代码,它正在运行。也许你应该直接向 freecodecamp 询问这个问题。

不管怎么说,break总会让你跳出循环。

在 5 和 6 中,条件是正确的,但是当您调用 shift 时,数组中的第一项仍在被删除。

比如在5中,

[0, 1, 0, 1] -> arr[i] = 0, func(arr[i]) 为假,copy = ([1, 0, 1])

[1, 0, 1] -> arr[i] = 1, func(arr[i]) 为真,copy = ([1, 0, 1])

[1, 0, 1] -> arr[i] = 0, func(arr[i]) 为假,复制 = ([0, 1])

在最后一次迭代中,即使传递了 0,仍然会移动 1,这就是为什么你得到 [0, 1]。