从JavaScript数组中删除索引未知项的更好方法

从JavaScript数组中删除索引未知项的更好方法,javascript,arrays,loops,for-loop,Javascript,Arrays,Loops,For Loop,我有一个数组,在随机索引中有零。给定不同数组的索引未知。我使用了下面的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

我有一个数组,在随机索引中有零。给定不同数组的索引未知。我使用了下面的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.
    }
  }
for(设i=0;i

如您所见,它将“i”重置为零,以便我可以再次遍历数组,因为它将被更改,并且零的索引将更改。我想知道有没有更好的办法?我有一种感觉,这可以被更好地编码。

您只需要将
I
减少1。此外,当您已经拥有索引时,不需要使用
indexOf

for (let i=0; i< arr.length; i++){
    if(arr[i] === 0){
      arr.splice(i, 1); //removes the zero at the index
      i--;
    }
  }
您可以倒计时(即(让i=arr.length-1;i>=0;i-)
,这样您尚未检查的元素的索引不会更改

let result = arr.filter(e => e!==0)
或者,如果您想继续使用for循环实现:

填充一个新数组而不是改变正在循环的数组怎么样

let result = []

for(let e of arr) {
    if(e!==0) result.push(e)
}

这是我从这样的数组中删除项的首选方法

const newArray=array.filter(项=>ele!==0)

这里有几个选项,你可以在这里选择

  • 保留for循环:您可以用减量
    i
    代替
    i
    (即用
    i--
    替换
    i=0
  • 用过滤器替换循环:
    arr=arr.filter(element=>element!==0)
  • 这两个选项都将按照您的需要就地修改数组。如果
    arr
    被初始化为常量,则第二个选项将不起作用。如果是这种情况,则必须使用选项1,或者将筛选结果分配给新数组,并在筛选后使用该结果代替原始数组


    第二个选项更简洁,但第一个选项是对现有代码进行一个小的更改,以使其按预期工作。

    Array.filter()…向后走……过滤器将不会具有他们试图实现的代码的随机方面。哦,nvm我读错了问题域。你搞定了,哈哈
    let result = []
    
    for(let e of arr) {
        if(e!==0) result.push(e)
    }