$.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);
}
}