昨天一个朋友让我帮她修改的一段代码:
需求要每条数据轮播1分钟,然后删除,运行的时候会发现foreach循环中,删除一个之后,其他的就无法删除了。
【分析原因】
数据格式例如:['a','b','b','c'],需求是删除item为‘b’的元素
第一次循环:SysNotices数据:['a','b','b','c'],index为0,item:'a',不符合需求,
第二次循环:SysNotices数据:['a','b','b','c'],index为1,item:'b',执行splice(index,1),
第三次循环:SysNotices数据:['a','b','c'],index为2,item:'c',不符合需求,
到此数据中还有一个'b'删除不掉
使用splice删除数组元素会改变原始数组,这样会打乱foreach的index指向数组的下标
解决方法:
for
for(var i=0,sign=true,len=that.data.SysNotices.length;i<len;sign ? i++ : i){
if(that.data.SysNotices[i] && that.data.SysNotices[i].kind == 1){
sign = false;
setTimeout(() => {
that.data.SysNotices.splice(i,1)
that.setData({
SysNotices: that.data.SysNotices,
currentSwiper:0
})
}, 60000)
}else{
sign = true;
}
}
使用 sign 标记是否执行删除操作,删除元素则 i 保持不变,不执行删除时 i++ ,保证下一次循环时的指向的数组元素正确。文章来源:https://www.toymoban.com/news/detail-485511.html
暂时写到此处,如有其他更好的方法再更新。文章来源地址https://www.toymoban.com/news/detail-485511.html
到了这里,关于JS循环遍历并删除指定元素的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!