😀
最近在前端发货单 deliveryorder 页面里遇到一个奇怪问题:明明第 14、15、16、17 行都是 miss,按理说应该全部过滤掉,但页面上最后却留下了 15 和 17。
一开始看代码,判断条件似乎没问题:
问题不在 miss 字段,而在“正序遍历数组时同时删除元素”。
当遍历到第 14 项并执行 splice 后,第 15 项会立刻向前移动,占据原来第 14 项的位置。但循环索引继续往后走,于是刚刚移动过来的第 15 项被跳过了。接着第 16 项被删除,第 17 项同样左移后被跳过。
所以连续 miss 的结果就变成:
最终页面留下了 15 和 17。
解决方案是不要在正序遍历时直接 splice 原数组,而是使用 filter 生成新数组:
接口返回后统一处理:
这样不会改变正在遍历的数组结构,连续的 miss 项也能被完整过滤掉。
这类问题的经验是:数组删除如果用 splice,要么倒序遍历,要么先收集后删除;如果只是过滤数据,优先使用 filter,语义更清楚,也更不容易出现索引跳项问题。
 
如何做出网页版在线聊天时,有新消息浏览器标签闪烁的效果一次 Xray REALITY 连接失败排查:不是被攻击,而是伪装目标站失效
Loading...