2017-04-17 56 views
0

我很少使用'break語句'。在js中使用break語句

我幾乎第一次使用它來通過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; 
} 

而且我發現奇怪的是,我通過了4出的文章沒有6「休息」。

但是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]沒有休息。

回答

1

在5和6中,條件是正確的,但是當您調用shift時,數組中的第一項仍然被刪除。

例如,在圖5,

[0,1,0,1] - > ARR [I] = 0,FUNC(ARR [I])爲假,複製=([1,0,1 ])

[1,0,1] - > ARR [I] = 1,FUNC(ARR [I])爲真,複製=([1,0,1])

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

在上次迭代中,即使傳遞0,被移動,這就是爲什麼你得到[0,1]。

+0

謝謝馬克。在編寫代碼之前我應該​​深思熟慮! –

0

我想你的鉻控制檯上的代碼,它工作正常。也許你應該直接詢問freecodecamp關於這個問題。

無論如何,休息會永遠打破你走出循環。

+0

對不起,我上傳了「工作良好的代碼」,並將其編輯爲「不間斷」版本。 –