从for循环中删除数组中的项

时间:2016-02-17 11:40:45

标签: javascript arrays cordova

我在for循环中删除数组中的项目时遇到了javascript问题。

我的代码检查是否存在包含字符串化对象的localStorage项目,解析它,运行for循环,对每个项目执行一些操作(效果很好),如果条件良好则删除项目,最后保存新数组到localStorage项目。 这是:

if (localStorage.getItem(user_id+"_tosave") && localStorage.getItem(user_id+"_tosave").length>1){ 
    var local_tosave = JSON.parse(localStorage.getItem(user_id+"_tosave")); 
    if (local_tosave.length>0){         
        for (i = 0; i < local_tosave.length; i++) {             
            // SOME OTHER STUFF HERE...
            if (navigator.onLine){local_tosave.splice(i,1);}                    
        };          
        localStorage.setItem(user_id+"_tosave",JSON.stringify(local_tosave));
        alert(localStorage.getItem(user_id+"_tosave")); // DISPLAY TO CHECK
    }           
}

只删除数组的最后一项......为什么?当数组中有多个元素时,splice函数会中断循环。 我想有关于对象的事情。我在其他对话中看到的迭代,但给出的解决方案对我没有用。 Fyi,我试过local_tosave.splice(i--,1);,这更糟糕。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果顺序无关紧要,我会尝试向后走数组。喜欢这个

for (i=local_tosave.length-1; i>=0; i--) {

所以末尾的元素会被切掉,其余的数组也不会被触及。

希望有所帮助

答案 1 :(得分:0)

问题在于增量。我建议使用while的其他循环。

var i = 0;
while (i < local_tosave.length) {
    if (navigator.onLine) { 
        local_tosave.splice(i, 1);
        continue;                  // because i should stay
    }
    i++;
};