2016-09-12 101 views
-1

下面這個函數是創建數組切片,push是無限循環。任何人都可以試圖證明這一點。儘管有條件,爲什麼這個for循環是無限循環?

function MyFunction(arr, size) { 
    var newArr = []; 

    for(var i=0; i<arr.length; i+size)  
    { 
    newArr.push(arr.slice(i,i+size)); 

    } 
    return newArr; 
} 

我能夠在while循環中實現我的要求,雖然它看起來幾乎相似。

function MyFunction(arr, size) { 
    var newArr = []; 
    var i = 0; 
    while(i < arr.length)  
    {  
    newArr.push(arr.slice(i,i+size)); 
    i = i + size; 
    } 
    return newArr; 

} 

採樣輸入: - myFunction的([ 「一」, 「B」, 「C」, 「d」],2);

樣本輸出: - [[ 「A」, 「B」],[ 「C」, 「d」]]

+0

'1 + size'不會改變'i'。 '我+ =大小'呢。 – Xufox

+0

僅僅通過比較你的兩種方法,你就可以在第一種方法中發現問題。 – Harshal

回答

1

在你的循環,你永遠不會增加您的變量i。這就對了。 i++自動增量ii+size沒有。

它應該是 i=i+sizei+=size;

希望這會有所幫助。

編輯

您的循環應該是: -

function MyFunction(arr, size) { 
    var newArr = []; 

    for(var i=0; i<arr.length; i = i+size)  
    { 
    newArr.push(arr.slice(0,size)); 

    } 
    return newArr; 
} 
10

我認爲i+size應該i += sizei = i + size

在第一個循環中,您永遠不會遞增i

編輯

您可能還需要改變循環體太匹配while循環。

例如,把他們放在一起,這for循環應該是你while迴路的等效:

for (var i = 0; i < arr.length; i += size) { 
    newArr.push(arr.slice(i, i + size)); 
} 
+0

謝謝,我刪除了break語句; – RanchiRhino

+0

@RanchiRhino請問爲什麼你接受了其他(後來)的答案,而不是我的?這兩個答案几乎完全相同。 – smarx

+0

初學者需要一些動力,我想..... – RanchiRhino