2016-11-14 5 views
0

nicht sicher, was hier falsch ist, aber ich versuche, eine Reihe von Zahlen in einem Array hinzuzufügen (nicht das gesamte Array), aber es sieht aus wie es ist das gesamte Array zusammenfassend:Summe in verschachtelten Schleifen Rückkehr falsch

function sumPrimes(num) { 
 
    var arr = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]; 
 
    var total = 0; 
 
    var index; 
 
    //loop through the whole array 
 
    for (var i = 0; i < arr.length; i++) { 
 
    //find matching prime number 
 
    if (num < arr[i]) { 
 
     // get index of prime number in the array 
 
     index = arr.indexOf(arr[i]); 
 
     //sum up total of prime numbers up to 'num' 
 
     for (var b = 0; b < index; b++) { 
 
     total = total + arr[index]; 
 
     } 
 
    } 
 
    } 
 
    return total; 
 
} 
 
sumPrimes(10);

+1

fügen Sie bitte einige Anwendungsfälle hinzu oder fügen Sie mindestens das gewünschte Ergebnis hinzu. –

+4

'index = arr.indexOf (arr [i]);' - ist das nicht nur eine verschleierte Art zu sagen: index = i' –

+0

console.log() ist dein Freund, der dir beim Debuggen hilft. – epascarello

Antwort

2

Wenn Ihr Ziel ist, berechnen Sie die Summe aller Primzahlen weniger als die angegebene Anzahl, dann ist die Lösung viel einfacher.

Entweder

function sumPrimes(num) { 
    var arr = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]; 

    var total = 0; 

    for (var x of arr) { 
     if (x < num) 
      total += x; 
     else 
      break; 
    } 

    return total; 
} 

, die arbeitet, wenn arr sortiert ist, oder

function sumPrimes(num) { 
    var arr = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]; 

    var total = 0; 

    arr.forEach(function(x) { 
     if (x < num) 
      total += x; 
    }, this); 

    return total; 
} 

, die auch für einen unsortierten Array funktionieren würde.

+0

Danke, aber ich versuche tatsächlich, die Summe der Werte des Arrays bis zur Indexzahl zu zählen. also für dieses Beispiel sollte es von 2 bis 11 zählen – sammyb123

+0

@ sammyb123 das ist genau das, was mein Code tut - es summiert die Zahlen von 2 + 3 + 5 + 7 = 17. Oder meinst du, müssen die ersten 10 Zahlen zusammenfassen? –

-1

Sie benötigen Index b ersetzen:

//sum up total of prime numbers up to 'num' 
for(var b=0; b<index; b++){ 
    total = total + arr[b]; 
} 

EDIT: und werde der äußeren Schleife befreien

+0

Immer noch falsch, du bist richtig es sollte "b" sein, aber es gibt ein weiteres Problem – epascarello

+0

und loswerden der äußeren Schleife – holtc

+1

Wie wird Index gesetzt, wenn Sie die äußere Schleife loswerden? –

Verwandte Themen