gpt4 book ai didi

javascript - 过滤和更改变量值而不引起副作用

转载 作者:行者123 更新时间:2023-12-03 06:25:11 25 4
gpt4 key购买 nike

我想仅过滤数组中大于 10 的数字,并更改原始变量而不引起副作用。

我在做什么:

let numbers = [15, 5, 2, 1, 59, 29];
numbers = numbers.filter((number) => {
if (number > 10) return number;
});

有效,但这会产生副作用,对吗?是否可以在没有副作用的情况下做到这一点,并且仍然使用相同的变量名称?

谢谢。

最佳答案

所以...您正在做的是将原始数组 numbers 替换为包含过滤信息的新数组。如果你想改变初始数组,将需要更多的代码。需要更多代码的原因是您正在谈论在循环遍历数组时修改数组的长度,这是一个不好的做法。

为此,您可以循环遍历数组一次并找到所有值大于 10 的索引。然后,一旦获得所有索引,您就可以循环遍历它们并拼接出数组的这些部分。

下面的代码是你可以如何做到这一点。不确定最有效,但这是一种方法。

let numbers = [15, 5, 2, 1, 59, 29];
let badIndices = [];
numbers.forEach( (val, idx) => {
if(val > 10) badIndices.push(idx);
});
badIndices = badIndices.reverse();
badIndices.forEach( i => numbers.splice(i, 1));

在拼接之前您需要反转索引的顺序,否则后续索引的偏移量将被关闭。换句话说,您需要从尾到前开始拼接。否则,从前面删除会更改后续索引,从而使函数无效。

关于javascript - 过滤和更改变量值而不引起副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38689840/

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