2017-06-14 57 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的因素沒有多大意義。 –

相關問題