You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定索引数组删除目标数组对应元素 解决splice操作异常

问题原因

你的代码运行结果不符合预期的核心原因是:删除数组靠前的元素后,数组后续元素的索引会自动前移1位。
比如你示例中的arr1 = [0,2]:

  1. 第一步删除索引0的元素后,原数组arrObj变成[4,6,7,21,17,12],原来索引为2的元素6现在的索引已经变成了1
  2. 第二步你还按原始索引2去删除,就会删掉当前索引为2的元素7,最终结果不符合要求。

方案1:倒序遍历索引数组(适配你的场景,最优)

题目明确说明索引数组arr1始终为升序排序,我们可以从最大的索引开始倒序删除,删除大索引不会影响还未处理的小索引的实际位置:

for(let i = arr1.length - 1; i >= 0; i--){
   arrObj.splice(arr1[i], 1)
}

运行你的示例逻辑:

  • 先删除索引2的元素6,此时数组变成[1,4,7,21,17,12],索引0的元素仍然是1,没有发生位移
  • 再删除索引0的元素1,最终得到[4,7,21,17,12],完全符合预期。

方案2:生成新数组(不修改原数组,通用性更强)

如果需要保留原数组,或者不确定索引数组的排序规则,可以用filter直接过滤掉需要删除的索引对应的元素:

const deleteIndexSet = new Set(arr1)
const result = arrObj.filter((item, index) => !deleteIndexSet.has(index))

该方法不需要修改原数组,也不需要依赖索引数组的排序规则,适用场景更广泛。


内容的提问来源于stack exchange,提问作者Sushant Rad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:57:03