おそらく、をスキップするadd
と、単純にすべてを追加して後でオブジェクトを削除するよりもコストがかかります。
インダイレクションを使用することもできます。各オブジェクトは、配列内のインデックスであることを「認識」しています。配列を反復するときは、「独自の」インデックスをスキップします。
var what_to_do = function( index, element ) {
// do stuff with element
}
// handle all elements _before_ this
var i = 0;
for( ; i != this.index && i != elements.length; ++i ) {
what_to_do( i, elements[i] );
}
++i; // skip this one
for( ; i < elements.length; ++i ) {
what_to_do( i, elements[i] );
}
'do stuff' は、同じことを繰り返す必要がないように、無名関数にカプセル化することができます。
- 編集 -
うーん...そして、「スキップ」機能を除外することもできます:
function skip_ith( elements, thisindex, f ) {
var i = 0;
for( ; i != thisindex && i != elements.length; ++i ) {
f( i, elements[i] );
}
++i;
for( ; i < elements.length; ++i ) { // note: < because i may be length+1 here
f( i, elements[i] );
}
}
応用:
for( var i = 0; i != elements.length; ++i ) {
skip_ith( elements, i, function( index, element ) {
// do stuff with element
} );
}