JS 循环时不会检查数组中的最后一个值

问题描述 投票:0回答:2

我试图循环遍历一个数组,以检查使用模运算后与数组中的所有剩余值相比是否没有任何值返回 0。

实际上,这应该只返回数组中的素数,而不首先建立“isPrime?”功能。目前它似乎可以工作,除非我添加一个我想在数组末尾拼接的错误值..那个似乎没有被检查?

function ModuloPrimes(variables) {
  
  const variables = [2,3,25,5,7,9,15,14,4]

  variables.forEach(val => {                
    for(let i = 0; i < variables.length; i++){
      if(variables[i] % val === 0 & variables[i] != val){
      variables.splice(i,1)
      ++i
  }
  }
  })
    return variables
}

我期望上面的代码返回的是

variables[2,3,5,7]
但目前它返回
variables[2,3,5,7,4]
并且因为
4 % 2 = 0 
它也应该拼接 4。我哪里出错了?

javascript arrays modulo
2个回答
1
投票

错误的逻辑:当

variables.splice(i,1)
数组长度减少时,你应该再次检查循环
i
,而不是跳过;只需将
++i
替换为
--i
即可解决问题。


1
投票

既然你减少了数组大小,你应该使用

variables.splice(i--,1)

您还可以使用

Array::filter()
Array::some()
来实现您的目标:

const variables = [2,3,25,5,7,9,15,14,4];

console.log(...variables.filter(n => !variables.some(val => n % val === 0 & n != val)));

© www.soinside.com 2019 - 2024. All rights reserved.