可能跳过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
} );
}