Javascript 模行为不稳定的If语句
我正在制作一个函数来创建一个从0到Javascript 模行为不稳定的If语句,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我正在制作一个函数来创建一个从0到num的素数列表。我从2到num的整数列表开始,然后迭代从2到I
num
的素数列表。我从2到num
的整数列表开始,然后迭代从2到I
的每一个整数;如果在任何点项%i==0
,则该项将从列表中删除。这很好:
函数getPrimes(num){
//获取从2到num的整数列表
让素数=[…数组(num+1).keys();
素数=素数。拼接(2);
设lastNumber=primes[primes.length-1];
//让iterable运行它的循环
//对于素数中的每个数
for(让素数为){
//如果不是prime,请使用iterable删除
for(设i=2;iMath.floor(num/2)
时,它以某种方式破坏了代码:
函数getPrimes(num){
//获取从2到num的整数列表
让素数=[…数组(num+1).keys();
素数=素数。拼接(2);
设lastNumber=primes[primes.length-1];
//让iterable运行它的循环
//对于素数中的每个数
for(让素数为){
//如果不是prime,请使用iterable删除
for(设i=2;i当我尝试时,
getPrimes(10)
给出了[2,3,5]
。从0到10的素数列表中缺少7。为什么?我检查了,7模2、3和4分别返回1、1和3。那么为什么循环中从素数中删除7的代码运行呢?这是我放在代码中的唯一位置,我想从数组中删除一个数字。第一个issue是指在删除项目时循环,这会导致跳过某些项目。相反,向后循环,以便仅移动已检查的项目。其次,num/2
应更改为Math.sqrt(数字)
,因为这是在确定一个数字是素数之前需要检查的最大因子。使用此方法,无需将2
添加回数组
函数getPrimes(num){
//获取从2到num的整数列表
让素数=[…数组(num+1).keys();
素数=素数。拼接(2);
设lastNumber=primes[primes.length-1];
//让iterable运行它的循环
//对于素数中的每个数
对于(设i=primes.length-1;i>=0;i--){
设数=素数[i];
//如果不是prime,请使用iterable删除
对于(设j=2;j*j如果在迭代过程中拼接数组,则可能会跳过元素和其他不可预测的行为。在这种情况下,向后迭代可以避免问题,即删除的元素永远不会影响数组中剩余的要遍历的项。此外,如果有索引,则可以避免线性indexOf
call@ggorlen是的!谢谢。