最近在前端发货单
deliveryorder 页面里遇到一个奇怪问题:明明第 14、15、16、17 行都是 miss,按理说应该全部过滤掉,但页面上最后却留下了 15 和 17。一开始看代码,判断条件似乎没问题:
问题不在
miss 字段,而在“正序遍历数组时同时删除元素”。当遍历到第 14 项并执行
splice 后,第 15 项会立刻向前移动,占据原来第 14 项的位置。但循环索引继续往后走,于是刚刚移动过来的第 15 项被跳过了。接着第 16 项被删除,第 17 项同样左移后被跳过。所以连续 miss 的结果就变成:
最终页面留下了 15 和 17。
解决方案是不要在正序遍历时直接
splice 原数组,而是使用 filter 生成新数组:接口返回后统一处理:
这样不会改变正在遍历的数组结构,连续的
miss 项也能被完整过滤掉。这类问题的经验是:数组删除如果用
splice,要么倒序遍历,要么先收集后删除;如果只是过滤数据,优先使用 filter,语义更清楚,也更不容易出现索引跳项问题。- 作者:吕行者
- 链接:https://www.lvy.life/article/2026/07/03/3921f2f0-5182-8006-961b-d2e615f48d8e
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。






