【发布时间】:2022-01-02 17:07:33
【问题描述】:
我需要写一个函数
filterRangeInPlace(arr, a, b)
接受一个数组和两个数字,并从数组中删除不在 a 到 b 范围内的所有元素。所以支票看起来像
a ≤ arr[i] ≤ b
我想用 for 循环和拼接方法来做。但无法弄清楚为什么该函数将某些元素保留在范围之外,在我的例子中,它是 number 3。这不是家庭任务或其他什么,我只是在练习数组方法。这是我的代码:
let myArr = [1, 3, 8, 3, 9, 5, 3, 4, 10, 7, 6, 1]
function filterRangeInPlace( arr, a, b ) {
for ( i = 0; i < arr.length; i++ ) {
if ( arr[i] < a || arr[i] > b ) {
arr.splice(i, 1)
}
}
}
filterRangeInPlace(myArr, 4, 9)
console.log(myArr) // [3, 8, 9, 5, 4, 7, 6]
我知道我在某处弄乱了索引,但不知道在哪里以及如何,因为其余的工作正常。谢谢!
【问题讨论】:
-
如果你删除一个元素,你不能增加索引,因为这样你就跳过了元素。更好的是从头到尾遍历数组。这样你就不需要关心索引...
标签: javascript arrays for-loop array-splice