所以我想寫一個函數返回所有素數的總和,直到包括一個提供的數字。嵌套ES6數組幫助器方法來生成素數數組
我寫了這個,它的工作原理:
function sumPrimes(num) {
const arr = Array.from({length: num+1}, (v, k) => k).slice(2);
return arr.filter(element => {
\t for(let i = 2; i < element; i++) {
if(element % i === 0) {
return false;
}
}
return element;
}).reduce((previous, current) => {
\t return previous += current;
}, 0);
}
sumPrimes(9);
我想這會看起來更整潔,如果for循環與另一個陣列的輔助方法所取代。然而,我正在努力實現這一點。
這是我到目前爲止有:
function sumPrimes(num) {
const arr = Array.from({length: num+1}, (v, k) => k).slice(2);
return arr.filter(element => {
\t return arr.find(ref => {
console.log("(" + element + " % " + ref + " === 0) " + (element % ref === 0));
\t if(element % ref === 0) { return false; }
return true;
});
}).reduce((previous, current) => {
\t return previous += current;
}, 0);
}
sumPrimes(20);
這樣寫的,功能不再按預期工作 - 它並不過濾任何數字的,因此所有由.reduce幫手加總。控制檯使它看起來像if語句仍然按照需要工作;我究竟做錯了什麼?
不是你問什麼,但對於'(讓我= 2;我
' wiki/Sieve_of_Sundaram)作爲你的幫手。 [這裏](http://jsfiddle.net/py3Qv/)是一個JS代碼。 – Redu
謝謝@WillNess!我認爲沒有必要擔心平方根,但現在想想它,你可以說,我可以看到它是如何使功能更有效率 –