在不产生副作用的情况下过滤和更改变量的值
Filtering and changing value of variable without causing a side effect
我只想过滤数组中大于10的数字,并在不产生副作用的情况下更改原始变量。
我在做什么:
let numbers = [15, 5, 2, 1, 59, 29];
numbers = numbers.filter((number) => {
if (number > 10) return number;
});
是有效的,但这会产生副作用,对吧?有可能在没有副作用的情况下做到这一点,并且仍然使用相同的varialla名称吗?
谢谢。
所以。。。您正在做的是将原始数组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));
在拼接之前,您需要颠倒索引的顺序,否则后续索引的偏移量将被关闭。换句话说,您需要从末尾开始向前拼接。否则,从前面删除会更改后续索引,从而使函数无效。
相关文章:
- IF 语句不改变变量的结果
- 为什么不是'这个CanvasJS脚本动态地改变变量
- 在php中改变变量,但在javascript中相同的变量不变
- 为什么Javascript不使用onChange来改变变量?
- 添加一个DOM/SVG元素与d3 javascript库改变变量引用/范围,为什么
- 通过点击按钮改变变量的值
- 在按下键后改变变量
- JQuery改变变量/成本后点击
- Eventlistener点击不改变变量时按下
- 改变变量中的链接
- 不能让函数改变变量
- Javascript滑块动态改变变量
- 通过html按钮改变变量
- Jquery在点击时改变变量
- 不能改变变量
- 为什么我的精灵在不改变变量的情况下加速
- 在javascript的文字函数中改变变量的值
- jQuery用子元素改变变量
- 改变变量&设置日期反应原生
- Ajax文件检查成功后不改变变量