我很少使用'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,我不能不间断地通过它们。
dropElements([1, 2, 3, 4], function(n) {return n >= 3;});
dropElements([1, 2, 3], function(n) {return n > 0;});
dropElements([1, 2, 3, 4], function(n) {return n > 5;});
dropElements([1, 2, 3, 7, 4], function(n) {return n > 3;});
dropElements([0, 1, 0, 1], function(n) {return n === 1;});
[1, 0, 1]
但[0, 1]
没有休息。 dropElements([1, 2, 3, 9, 2], function(n) {return n > 2;})
[3, 9, 2]
但[9, 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询问这个问题。
无论如何,休息将永远打破你走出循环。