2016-09-12 5 views
-1

この機能はアレイスライスを作成することであり、プッシュは無限ループを与えます。誰でもそれを正当化しようとすることができます。なぜこのforループは条件にもかかわらず無限ループですか?

私は以下の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を([ "A"、 "B"、 "C"、 "D"]、2)。

サンプル出力: - [[ "A"、 "B"]、[ "C"、 "D"]]

+0

'私はsize'は' i'を変更しません+。 'i + = size'は行います。 – Xufox

+0

2つのアプローチを比較するだけで、第1のアプローチで問題を特定できます。 – Harshal

答えて

1

例えばは、すべて一緒にそれを置く、このforループはあなたのwhileループの同等でなければなりません。それだ。 i++自動増分iただし、i+sizeはありません。

i=i+sizeまたはi+=sizeです。

これが役に立ちます。

編集

あなたのforループする必要があります: -

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+sizei += sizeまたはi = i + sizeされるべきだと思います。

最初のループでは、iは決して増加しません。

EDIT

あなたは、あまりにもwhileループに合わせて、ループの本体を変更することもできます。あなたのあなたの変数iをインクリメントされることはありませんforループで

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

ありがとうございました。私はbreakステートメントを削除しました。 – RanchiRhino

+0

@RanchiRhino私はなぜ私の代わりに(後の)答えを受け入れたのですか? 2つの答えはほぼ同じです。 – smarx

+0

スターターは私が思ういくつかのモチベーションが必要でした..... – RanchiRhino

関連する問題