2016-12-21 5 views
1

逆ループの最初の反復がなぜ返されないのか誰かが説明しますか?最初の反復で逆ループ - 最初の反復が定義されていません

$(function(){ 
 
    
 
    var arr = [1,2,3,4,5,6,7,8] 
 
    
 
    for (var i = arr.length; i > -1; i--) { 
 
    console.log(arr[i]); 
 
    } 
 
    
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+3

VAR I = AR:インデックスarr.length - 1

ので、未定義のを避けるために、これを行いますr.length-1; – Cruiser

+1

何かを追加するためだけのものです: 'arr.reverse()。map(e => console.log(e));'ラムダとecmascriptの初版以来サポートされているリバースプロトタイプを使用しています。 https://jsfiddle.net/uoe33kk6/ – briosheje

答えて

4

iarr.lengthあります。

インデックスarr.lengthには要素がありません。ゼロベースの配列の最後の要素は、インデックスarr.length-1です。

逆に反復する通常の方法は

for (let i=arr.length; i-- > 0;) { 

ある(条件はカウンタをデクリメントし、ループの内容の前に実行されることに注意)

これもJavaScriptのに簡略化することができることができます

for (let i=arr.length; i--;) { 
+0

http://stackoverflow.com/questions/1642028/what-is-the-name-of-the-operator-in-c @DenysSeguret – Roberrrt

2

はなぜ代わりに正当化forループのpostfix decrement --とwhileループを使用していませんか?

var arr = [1, 2, 3, 4, 5, 6, 7, 8], 
 
    i = arr.length; 
 
    
 
while (i--) { 
 
    console.log(arr[i]); 
 
}

+0

'while(i--) 「何? – Roberrrt

+1

それはちょうどゼロに反復する。 –

+0

ここにdownvoteの本当の理由はありません。しかし、この種のループでは、カウンタの範囲をループに限定することは容易ではないことに注意してください(今は 'let'で可能です)。 –

0

これはarr.length戻り8からの配列の長さので起こり、およびJavaScriptで配列が(カウントが0から始まる)ゼロインデックスであるので、配列の最後の要素であります

$(function(){ 

    var arr = [1,2,3,4,5,6,7,8] 

    for (var i = arr.length - 1; i > -1; i--) { 
    console.log(arr[i]); 
    } 

}) 
関連する問題