javascript - 从 JavaScript 的数组中删除索引未知的项目的更好方法
问题描述
我有一个随机索引为零的数组。给定不同数组的索引是未知的。我使用以下 for 循环来查找和删除零,因此生成的数组与没有零的数组相同。
for (let i=0; i< arr.length; i++){
if(arr[i] === 0){
itemIndex = arr.indexOf(arr[i]);
arr.splice(itemIndex, 1); //removes the zero at the index
i = 0; //resets the i to zero so that every item in the array is searched even after it is altered.
}
}
如您所见,它将“i”重置为零,以便我可以再次遍历数组,因为它将被更改并且零的索引将更改。我想知道是否有更好的方法来做到这一点?我有一种感觉,这可以更好地编码。
解决方案
您可以在这里选择几个选项...
- 保留你的 for 循环:代替
i = 0
,你可以减少i
(即替换i = 0
为i--
) - 用过滤器替换循环:
arr = arr.filter(element => element !== 0)
两者都将修改数组,就像你想要的那样。arr
如果初始化为常量,第二个选项将不起作用。如果是这种情况,您将不得不使用选项 1,或者将过滤器结果分配给一个新数组并在过滤器之后使用它来代替原始数组。
第二个选项更简洁一些,但第一个是对现有代码的小改动,使其按预期工作。
推荐阅读
- css-grid - 如何检测添加到网格容器的项目,以及如何响应添加
- c - 为什么我使用 scanf 会出现分段错误?我已经初始化并设置了内存大小,但仍然出现段错误
- java - 返回 Kafka 结果时出现 ArrayIndexOutOfBoundsException
- proxy - SOCKS5 通过标准输入/标准输出
- javascript - 如何禁用画布缩放
- plotly - 有什么方法可以在 React App 中显示 Plotly Express Graph
- flutter - Flutter:找不到 plugins.flutter.io/firebase_core
- c# - 我刚开始编程,下面的错误并没有停止出现错误 CS1955 Non-invocable member 'Component.tag' cannot be used like a method
- java - ModelMapper 不可变 DTO 自定义映射
- git - git怎么知道有冲突