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
相关产品推荐
相关产品推荐

