2017-06-14 53 views
0

我想从数组中删除非素数,以下是仅删除偶数而不是质数。试图找到一个数组中的素数

function sumPrimes(num) { 
    //Produce an array containing all number of to and including num 
    let numArray = []; 
    for (let i = 1; i <= num; i++) { 
    numArray.push(i); 
    } 

    //Remove non-prime numbers from the array  
    numArray.map((number) => { 
    for (let i = 2; i < number; i++) { 
     if(number % i === 0) { 
      let index = numArray.indexOf(number); 
      return numArray.splice(index, 1);  
     } 
    } 
    }); 

return numArray; 

} 

sumPrimes(10); 

这是目前返回:

[1, 2, 3, 5, 7, 9] 

然而,素数是1,2,3,5,7(不包括9);

+0

输出对我来说是4,6,8,9,10,这是正确的。您已将其编程为打印时发现可分号码,而不是不可分割的号码。 –

+0

'map'不会删除任何内容。你是不是指过滤器?不要在循环中使用'splice'。 – Bergi

+0

你的回调将需要返回一些有意义的东西,而不是未定义的东西。 – Bergi

回答

1

使用filter()代替:

var numArray = [2, 3, 4, 5, 6, 7, 8, 9, 10] 
 

 
numArray = numArray.filter((number) => { 
 
    for (var i = 2; i <= Math.sqrt(number); i++) { 
 
    if (number % i === 0) return false; 
 
    } 
 
    return true; 
 
}); 
 

 
console.log(numArray);

+0

谢谢,我应该使用过滤器而不是地图。 btw我不需要使用Math.sqrt(数字); – Nims

+0

好吧,但对于更大的数字,速度要快很多。检查97是否是100的因素没有多大意义。 –

相关问题