我在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);
,这更糟糕。
感谢您的帮助。
答案 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++;
};