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

JavaScript数组移除指定索引范围元素问题求助

问题分析与修复

你的代码有两个关键问题导致70被误删:

1. 判断逻辑错误

你通过元素值的范围(arr[i] >= arr[start] && arr[i] <= arr[end])来决定是否删除元素,但需求是移除索引范围内的元素,不是值在某个区间的元素。这种判断逻辑不仅不符合需求,还会在数组存在重复值时引发错误。

2. splice用法错误

arr.splice(i)这种写法会删除从索引i开始到数组末尾的所有元素,而不是只删除当前索引的元素。当循环执行到i=2时,这行代码直接把40、50、60、70全部删掉了,所以最终只剩[20,30]。


修复方案

方案一:直接用splice一步完成(最简洁高效)

splice的语法是arr.splice(startIndex, deleteCount),要删除从start到end的元素,需要删除的数量是end - start + 1(因为包含start和end两个端点)。直接调用一次splice即可完成需求:

function removeVal(arr, start, end) {
    arr.splice(start, end - start + 1);
    return arr;
}

y = removeVal([20,30,40,50,60,70],2,4);
console.log(y); // 输出 [20,30,70]

方案二:修复原循环逻辑(如果必须用循环)

修改判断条件为检查索引是否在目标范围内,同时用splice(i, 1)删除单个元素,并且删除后将i减1(因为数组长度变短,后续元素会前移,不调整索引会跳过下一个元素):

function removeVal(arr, start, end) {
    for(let i = 0; i < arr.length; i++){
        if(i >= start && i <= end){
            arr.splice(i, 1); // 仅删除当前索引的一个元素
            i--; // 调整索引,避免跳过后续元素
        }
    }
    return arr;
}

y = removeVal([20,30,40,50,60,70],2,4);
console.log(y); // 输出 [20,30,70]

内容的提问来源于stack exchange,提问作者Leo Derramas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:35:13