在js

时间:2017-04-17 06:17:53

标签: javascript break

我很少使用'break statement'。

我几乎第一次使用它来通过免费代码营测试。

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

下面是我的代码。

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个没有'休息'。

但是数字5&amp; 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]没有休息。

2 个答案:

答案 0 :(得分:1)

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

例如5,

[0,1,0,1] - &gt; arr [i] = 0,func(arr [i])为false,copy =([1,0,1])

[1,0,1] - &gt; arr [i] = 1,func(arr [i])为真,copy =([1,0,1])

[1,0,1] - &gt; arr [i] = 0,func(arr [i])为false,copy =([0,1])

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

答案 1 :(得分:0)

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

无论如何,休息将永远打破你走出循环。