2016-04-25 5 views
-2

私は予期しない結果を返すforループを持っています。ここでは、コードされていますなぜJavaScriptループが一度に10個のインデックスの場所にジャンプしますか?

var matArray = scrolls; 
     var offset = $scope.offset; 
     for(var i = 0; i < matArray.length; i++) { 
      var pointer = (i + offset) % matArray.length; 
      console.log(matArray[pointer]); 
     } 

私が得ることを期待していますどのようなループは、特定のインデックスから始まり、その後、結果の周りのすべての方法まで、通常のループで継続することです。しかし、代わりに、ループジャンパ10インデックスは毎回スクロールします。オフセットをハードコードすると、たとえば次のようになります。

var matArray = scrolls; 
     var offset = $scope.offset; 
     for(var i = 0; i < matArray.length; i++) { 
      var pointer = (i + 1) % matArray.length; 
      console.log(matArray[pointer]); 
     } 

2番目のインデックスから期待どおりに機能します。

どのような考えですか?

+1

なぜあなたは '$のscope.offset'を記録し、それが持っているどのような値が表示されませんの? – Xufox

+2

「オフセット」は**文字列** – isvforall

+0

でも使用している場合は、AngularJSをタグに追加してください。 –

答えて

4

あなたは数に文字列を追加することで、あなたの問題に思えます、JavaScriptではの文字列に連結されます。例:

'9' + 1 // will be '91' 

あなたはparseInt機能を使用できます。

var offset = parseInt($scope.offset, 10); 
+1

完璧に働いた、ありがとう! – MattP

0

$scope.offsetは、数字と思われる場合はおそらく文字列 '1'です。
+(0 + '1')0であり、+(1 + '1')11であることに注意してください。 iに追加する前に、数にoffsetを変換するi + +offset

変更i + offset

var matArray = scrolls; 
var offset = $scope.offset; 
for(var i = 0; i < matArray.length; i++) { 
    var pointer = (i + +offset) % matArray.length; 
    console.log(matArray[pointer]); 
} 
0

使用

var pointer = (i + parseInt(offset, 10)) % matArray.length; 
+1

答えにいくつかの説明を加えてください。コードのみの回答は、同様の問題を抱えている他のユーザーには有益ではありません。 – Victor2748

関連する問題