Ich arbeite an Primzahlen-Algorithmus, und ich fast fertig .. Ich denke, Ausgang Array aktualisiert wird jedes Mal Schleife beendet, also wenn ich Funktion mit Primzahl aufrufen: zB primes(7)
, bekomme ich [7]
anstelle von [2,3,5,7]
. Wenn es mit nicht-prim aufgerufen wird, ist Ausgabe arr leer.Nur letzter Wert an Array geschoben
Hier Code:
function rimes(num){
var outputArr = [];
for(var i=1; i<=num; i++){
function range(start, count) {
return Array.apply(0, Array(count))
.map(function (element, index) {
return index + start;
});
}
var rangeArr = range(1,num);
var current = i;
function rangeFiltering(value){
return value !== 1 && value < current;
}
var filteredRange = rangeArr.filter(rangeFiltering);
function dividingByEachRangeElement(rangeElement){
return current % rangeElement !== 0;
}
var divided = filteredRange.filter(dividingByEachRangeElement);
if(divided.length === num - 2){ //current is prime if there are all numbers from 1 to current in divided array.(if there are zeros after modulo) i.e. when current is 5(prime), divided array is [2,3,4]. When current is 6(non prime), divided arr is [4,5] - 2,3 are missing because 6%2 = 0 and 6%3 = 0.
outputArr.push(current);
}
}
console.log(outputArr);
}
sumPrimes(47);
//sumPrimes(6) -> [];
//sumPrimes(7) -> [7];
//sumPrimes(11) -> [11];
Wie kann ich dieses Problem beheben?
Wenn Sie console.log (outputArr) zur for-Schleife hinzufügen, wird dies dazu führen, dass das Array bei jeder Schleife ausgegeben wird. Sie können feststellen, dass dem Array bis zur letzten Schleife nichts hinzugefügt wird. Dies ist also Ihr Problem. –
hast du versucht, es zu debuggen? warum nicht z.B. 'console.log (dividiert.length)' unterhalb der Definition für 'geteilt', um zu sehen, was vor sich geht? –
Sie scheinen "rangeArr" für jedes "i" neu zu berechnen, wobei jedes Mal dieselben Parameter verwendet werden. Ich denke nicht, dass das nötig ist - es wäre besser, es einmal zu bauen, vor der "for" -Schleife. – ahwayakchih