2016-05-03 10 views
0

以下は私のコードです。各項目のサイズを2ずつ小さくして、配列の特定の値が0または-1になると、undefinedに置き換えます。while JavaScriptは永遠にJavaScriptで動作します

例 -

入力から[5,4,4,2,2,8]

出力 -

Array   Non Blank Values  
5 4 4 2 2 8   6   
3 2 2 _ _ 6   4   
1 _ _ _ _ 4   2   
_ _ _ _ _ 3   1   
_ _ _ _ _ _  DONE 

コード(どういうわけかその無限ループと行く) -

var arr = [5,4,4,2,2,8]; // 6 4 2 1 
var num = 0; 
itemNum = countItemNotUndefined(arr); 

function makeItemUndefine(arr) { 
    return arr.map(function(x){ 
     x = x - 2; 
     return x ==0 || x == -1 ? undefined : x; 
    }) 
} 

function countItemNotUndefined(arr) { 
    var itemLength = 0; 
    arr.map(function(x){ 
     if(x !== undefined) 
      itemLength++; 
    }) 
    return itemLength; 
} 

while(itemNum != 0) { 
    num ++; 
    var result = makeItemUndefine(arr); 
    itemNum = countItemNotUndefined(result); 
} 

console.log("Number is ", num); 

私がここで間違っていることを教えてください。

+0

なぜそれは永遠に実行されませんか? 'itemNum'は決して変更されません – vsync

+0

@vsync' itemItemNum'を 'countItemNotUndefined(arr)'に渡すことによって 'itemNum'を' 0'に減らそうとしています –

+0

結果が使用されるのではなくループするたびに元の配列にリセットされるようです前のループから変更された配列 – Clint

答えて

3

arrに呼び出していますが、その結果は変更されません。これは、結果をresultという別の変数に割り当てるためです。したがって、実際には配列の数値は時間の経過と共に減少するわけではありません。

正しい解決策は次のようになります。

while(itemNum != 0) { 
    num ++; 
    arr = makeItemUndefine(arr); 
    itemNum = countItemNotUndefined(arr); 
} 

コードのもう一つの問題は、あなたがNaN年代に、それらを回すれ、未定義の数字から引くしようとしているという事実です。これには2つの解決方法があります。NaNcountItemNotUndefinedの中にあるか、またはundefinedが地図の内側にあるかを確認してください。

+0

いいえあなたのコードも試しました –

+0

@TechSolvrが答えを – mash

+0

に更新しました。私はそれを知っていました。 –

関連する問題