gpt4 book ai didi

javascript - filterRangeInPlace(arr, a, b) 获取数组 arr 并从中删除除 a 和 b 之间的值之外的所有值

转载 作者:行者123 更新时间:2023-12-04 10:04:50 26 4
gpt4 key购买 nike

下面的功能很好用

function filterRangeInPlace(arr, a, b) {

for (let i = 0; i < arr.length; i++) {
let val = arr[i];

// remove if outside of the interval
if (val < a || val > b) {
arr.splice(i, 1);
i--;
}
}

}

arr=[2,3,4,5,6,7,1,0,2,12,11];
filterRangeInPlace(arr,1,5);
alert(arr);


但我想对 forEach 执行相同的功能

let filterRange = (arr, a, b) => {
arr.forEach((item, i) => {
val=item;debugger;
if (val < a || val > b) {
arr.splice(i, 1);
i--;
}
})
}
arr=[2,3,4,5,6,7,1,0,2,12,11];
filterRange(arr,1,5);
alert(arr);


我试过了,但我无法得到正确的答案。它不像正常的迭代那样工作。有没有其他方法可以使用相同的 foreach

最佳答案

您不能使用 forEach 对数组进行就地修改,因为您无法控制在 forEach 内部发生循环的索引

forEach 的一个简单实现就像

Array.prototype.forEach = function(cb) {
const arr = this;
for(var i = 0; i < arr.length; i++) {
cb.call(arr, arr[i], i, arr);
}
}

如果你看看上面的人,回调只是用 arr[i] 值调用,如果数组发生变异,你将无法改变内部迭代器

对于像您这样的用例,您应该使用 Array.prototype.filter
let filterRange = (arr, a, b) => {
return arr.filter((item, i) => {
val=item;
if (val < a || val > b) {
return false;
}
return true;
})
}
var arr=[2,3,4,5,6,7,1,0,2,12,11];
arr = filterRange(arr,1,5);
alert(arr);

关于javascript - filterRangeInPlace(arr, a, b) 获取数组 arr 并从中删除除 a 和 b 之间的值之外的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61638751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com