slice()是js中的切片方法,从数组中删除某些元素,单次使用没有什么问题,但如果涉及到在list中删除多个元素,坑就来了
平时我们遍历数组时是这样的
for(var i = 0 ; i < needAddListWithAuth.length ; i++){
如果你调用needAddListWithAuth.splice(i,1)删除第i个元素,那么此时, needAddListWithAuth.length就发生了变化,循环的次数就减少了
解决1
needAddListWithAuth.length定义为一个变量存起来
eg.
var needAddListWithAuth = needAddList.slice();
var needAddListWithAuthLength = needAddListWithAuth.length
for(var i = 0 ; i < needAddListWithAuthLength ; i++){
if(needAddListWithAuth[i]["resourceAuthType"] != "0"){
needAddListWithAuth.splice(i,1);
}
}
此时,由于数组变短了,我们取数组的时候,可能会取到空
解决2
定义一个计数器,每次从数组中删除一个元素,计数器加1,从列表中出计数器的值时,i要减去计数器的值
var needAddListWithAuth = needAddList.slice();
var removeCount = 0;
var needAddListWithAuthLength = needAddListWithAuth.length
for(var i = 0 ; i < needAddListWithAuthLength ; i++){
if(needAddListWithAuth[i - removeCount]["resourceAuthType"] != "0"){
needAddListWithAuth.splice(i - removeCount,1);
removeCount++;
}
}
貌似好用了,以后遇到坑再编辑吧