迴圈陣列刪除某一類時無法遍歷的錯誤修正
阿新 • • 發佈:2018-12-29
$.each(self.items(), function (i, v) { if(v.businessses){ $.each(v.businesses, function (j,item ) { if(item){ if(!item.selected()){ self.items()[i].businesses.splice(j,1); } } }); }; });
刪除滿足具有selected(false)的項,此遍歷因為在遍歷過程中刪除會改變陣列length而漏掉處理後半部分的項
for(var i = self.items().length -1; i >= 0 ; i--){ if(self.items()[i].businesses){ for(var j = self.items()[i].businesses.length -1; j >= 0 ; j--){ if(self.items()[i].businesses[j]){ if(!self.items()[i].businesses[j].selected()){ self.items()[i].businesses.splice(j,1); } } } }; }
這種方法可以實現
(網上轉載)簡化版:一個簡單的需求是,在遍歷一個數組時,移除指定的項。
下列程式碼是不能正常工作的:
var elements = [1, 5, 5, 3, 5, 2, 4];
for(var i = 0; i < elements.length; i++){
if(elements[i] == 5){
elements.splice(i, 1);
}
}
不能正常執行的問題是,element.length是在for迴圈開始時就確定的snapshot,不會隨著splice操作而改變。
正確的寫法是:
var elements = [1, 5, 5, 3, 5, 2, 4];
for(var i = elements.length -1; i >= 0 ; i--){
if(elements[i] == 5){
elements.splice(i, 1);
}
}