循环数组删除某一类时无法遍历的错误修正

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

猜你喜欢

转载自blog.csdn.net/qq_42099419/article/details/85005627