var ar = [2, 3, 5, 7, 9];
for (var i = 0; i < ar.length; i+=1) {
//ar[i]を使った処理
}
もしくは、ループの度にlengthプロパティにアクセスしないように、配列の長さを初期化時に保存しておきます。
var ar = [2, 3, 5, 7, 9];
for (var i = 0, len = ar.length; i < len; i+=1) {
//ar[i]を使った処理
}
ちょっとだけエレガントに..
上記の書き方で全く問題はないのですが、 ちょっとしたテクニックとして、この処理は以下のように置き換えられます。
var ar = [2, 3, 5, 7, 9];
for (var i = 0, elem; elem = ar[i]; i+=1) {
//elem を処理
}
インデックスが配列の長さを越えるとundefinedが返ってきて、ループが終了します。
さらに、ループの判定時に配列の要素を変数に格納しているので、その後の処理がすっきりするのもなかなか良いです。同様に、ECMAScript5 で導入されたarray.forEach メソッドを使っても、配列要素への順次アクセスが可能です。
var ar = [2, 3, 5, 7, 9];
ar.forEach(function(e, i){
console.log(["Index ", i, " = ", e].join(''));
});
DOMのリストに対しては、forEachのcallメソッドを呼び出せばokです。
var divs = document.getElementsByTagName("div");
[].forEach.call(divs, function(div, i){
console.log(div.nodeName);
});
まとめ
forを使った配列のループにはlengthを使わなくてok!
0 件のコメント:
コメントを投稿