遍历数组时动态删除元素应避免正序for循环配合splice导致跳过元素,推荐倒序for循环、filter()创建新数组、while+indexof三种方式。

遍历数组时动态删除元素,关键在于避免跳过下一个元素,因为直接用 for 正序循环配合 splice() 会改变数组长度和索引位置。推荐三种安全、实用的方式。
倒序 for 循环(最直接)
从数组末尾开始遍历,删除元素不会影响前面未处理项的索引。
示例:删除所有值为 "banana" 的元素:
const fruits = ["apple", "banana", "orange", "banana", "grape"];
for (let i = fruits.length - 1; i >= 0; i--) {
if (fruits[i] === "banana") {
fruits.splice(i, 1);
}
}
// fruits → ["apple", "orange", "grape"]使用 filter() 创建新数组(推荐,函数式写法)
不修改原数组,语义清晰,代码简洁,适合大多数场景。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
示例:过滤掉所有 "banana":
const fruits = ["apple", "banana", "orange", "banana", "grape"]; const filtered = fruits.filter(item => item !== "banana"); // filtered → ["apple", "orange", "grape"] // fruits 不变
如需保留原数组引用,可赋值回原变量:fruits = fruits.filter(...)。
while + indexOf(适合只删第一个匹配项)
若只需删除首个符合条件的元素(而非全部),可用 indexOf 定位再 splice:
const fruits = ["apple", "banana", "orange", "banana"];
const index = fruits.indexOf("banana");
if (index !== -1) {
fruits.splice(index, 1);
}
// fruits → ["apple", "orange", "banana"]不复杂但容易忽略索引偏移——正序遍历时删一个,后面元素前移,下标就“跳”了。选对方法,问题就解决了。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










