场景:遍历一个Array,清除其中不符合条件的element
初始方案:遍历Array,对不符合条件的element,设置Array中该element对应位置为 null(array[i]=null),遍历结束后再次遍历Array,对不为null的element执行正常操作。
初始方案问题:第二次遍历时,循环次数不等于(小于)应该循环的次数,即应该有10个不为null的element执行正常操作,但实际上只有5个element执行了正常操作
原始代码:
for (var i = 0, stop; stop = stopList[i]; i++) {
if (stop isn't legal) {
stopList[i]=null; //error
continue;
}
// another
for (var k = 0, marker; marker = markerList[k]; k++) {
if (marker isn't legal) {
markerList[k] = null; //error
break;
}
}
}
//has wrong iterator times
for (var i = 0, oldMarker; oldMarker = markerList[i]; i++) {
if(oldMarker != null){
//do
}
}
//also has wrong iterator times
for (var i = 0, stop; stop = stopList[i]; i++) {
if(stop != null){
//do
}
}
原因:未知,有时间再查
修改方案:
var tempNewList = [];
label: for (var i = 0, stop; stop = stopList[i]; i++) ...{
if (stop isn't legal) {
continue label;
}
// another
for (var k = 0, marker; marker = markerList[k]; k++) {
if (marker isn't legal) ...{
markerList.splice(k,1);
continue label;
}
}
tempNewList.push(stop);
}
//has expectant iterator times
for (var i = 0, oldMarker; oldMarker = markerList[i]; i++) ...{
//do
}
//also has expectant iterator times
for (var i = 0, stop; stop = tempNewList[i]; i++) ...{
//do
}
初始方案:遍历Array,对不符合条件的element,设置Array中该element对应位置为 null(array[i]=null),遍历结束后再次遍历Array,对不为null的element执行正常操作。
初始方案问题:第二次遍历时,循环次数不等于(小于)应该循环的次数,即应该有10个不为null的element执行正常操作,但实际上只有5个element执行了正常操作
原始代码:


























修改方案:






















