2016-11-18 1 views
1

Ich bin sehr neu in Javascript. Ich habe versucht, hier nach einer Antwort zu suchen, aber ich hatte nicht viel Glück und vielleicht frage ich das auch. Also, jetzt poste ich.Erstellen einer Summe von Arrays stoppen, wenn die Zahl 13 zeigt aber immer noch Summe

Ich habe eine Schleife, in der ich eine Summe der Arrays bekommen soll. Wenn jedoch die Zahl 13 im Array ist, dann stoppt die Schleife Zahlen Addition, aber immer noch die Zahlen zurückgeben hinzugefügt, bevor es zum 13. Recht bekam jetzt, ich habe dies als meinen Code:

function sumNumbers(array) { 
    var sum = 0; 
    for(var i = 0; i < array.length; i++) { 
    sum += array[i]; 
    if(array[i] == 13) { 
     break; 
    } 
    } 
    return sum; 
} 

I Setzen Sie das Argument für die Funktion 'array'. Dann dachte ich, ich müsste eine Variable erstellen, wo die Summe der Arrays erscheinen würde, also habe ich es unter 0 gestartet (ich habe es versucht, [], aber getestet und es war nicht korrekt - immer noch will ich das verstehen). Ich verstehe, dass Sie für jede Schleife die Initialisierung haben müssen, die war , dann die Bedingung und dann der endgültige Ausdruck. Da die Anzahl der Elemente nicht definiert ist, habe ich die Länge verwendet. Also, wenn die Variable kleiner ist als diese Zahl, dann wird es weitergehen und es weiter hinzufügen. Also habe ich es gebeten, eine Summe aller Arrays zu bekommen, aber wenn eine Zahl in einem Array ist 13, ich brauche es zu stoppen, aber immer noch die Nummern, die es hinzugefügt, bevor es 13 erreicht.

Jetzt ist die Funktion definiert, die Summe aller Arrays wird zurückgegeben und 0 wird zurückgegeben, wenn es leer ist. Aber ich bekomme diesen Fehler

Erwartet 16 zu tief gleich 3.

und kann nicht herausfinden, was ich falsch mache. Wenn jemand helfen und es ein wenig erklären könnte, wäre das großartig. Das ist meine erste Frage hier, also wenn ich es auf eine nervige Art gemacht habe, danke im Voraus!

+1

Sie erhalten welchen Fehler? Was ist das Array, an dem du vorbeikommst? – Amy

+0

Pause wird nur für den Ausgang für die Schleife – Mahi

+0

Ich denke, es ist nicht wirklich ein Fehler, es ist nur eine andere Antwort erwartet. Ich gehe davon aus, dass ich nach der Pause etwas anderes machen muss, damit es immer noch die Summe zurückgibt. Also, wie ... [1,2,13] würde immer noch 3 zurückgeben, anstatt 16 zurückzugeben. – CharlieLily

Antwort

2

Wenn Sie aufhören müssen hinzuzufügen, wenn Sie 13 finden und 13 in Ihrer Summe nicht enthalten, dann müssen Sie den Wert des nächsten Array-Elements überprüfen, bevor Sie es zu Ihrer Summe hinzufügen. Ich habe zwei Zeilen in Ihrem Code umgekehrt. Bitte beachten Sie die neue Version:

function sumNumbers (array) { 
    // First check if the array is a valid input to this function 
    if (typeof array == 'undefined') 
     return 0; // Or even better throw an exception 

    var sum = 0; 
    for (var i = 0; i < array.length; i++) { 
     if (array[i] == 13) { break; } 
     sum += array[i]; 
    } 
    return sum; 
} 
+1

Vielen Dank. Auch für Ihre Erklärung. Sehr geschätzt! – CharlieLily

+0

@CharlieLily Sie sind herzlich willkommen und gerne helfen. Wir waren alle einmal Anfänger. – mba12

0

Array.prototype.some

Es ist wie forEach, aber es hört auf Looping, wann immer Sie true zurück. Es wurde für Szenarien wie Ihres erstellt.

let total = 0; 
[3,7,4,3,2,1,13,44,66,8,408,2].some(num => { 
    if (num === 13) return true; 
    total += num; 
}); 
console.log(total); //-> 20 

Hier ist, wie Sie es verwenden würde:

function sumNumbers (arr) { 
    let total = 0; 
    arr.some(num => { 
     if (num === 13) return true; 
     total += num; 
    }); 
    return total; 
} 
+1

Ich denke, Sie sollten verstehen, dass OP (wie er meinte) ein JavaScript-Begginer ist. Wie können Sie erwarten, dass er Pfeilfunktionen, Prototypen von Konstrukteuren, strenge Vergleiche usw., die Sie verwenden, leicht versteht? Vielleicht sucht er nur nach einer einfachen Lösung. –

+0

Ich bin ein autodidaktischer Entwickler, der aus dem Lesen von Code gelernt habe, den ich nicht verstanden habe. Ich entschuldige mich nicht für meine Antwort und wenn das OP Fragen hat, können sie fragen und ich werde ihnen gerne beim Lernen helfen. Der Punkt meiner Antwort ist, dass die Sprache Konstrukte hat, um sein Problem zu lösen, und er/sie sollte das wissen. –

0

Es gibt viele Möglichkeiten, dies zu tun ... eine von ihnen:

function sumNumbers (array) { 
 
    var sum = 0; 
 
    for (var i = 0; array[i] != 13; i++) { 
 
     sum += array[i]; 
 
    } 
 
    return sum; 
 
}

Über Ihre :

Dann dachte ich, ich müsste eine Variable erstellen, wo die Summe der Arrays erscheinen würde, also habe ich es bei 0 gestartet (ich habe [] getestet, aber es war nicht korrekt - will das immer noch verstehen).

Nun, wenn Sie eine Variable initialisieren mit [] setzen Sie ein leeres Array. Denken Sie daran, dass Klammern [] immer für Arrays gelten.

+0

Was passiert, wenn 13 niemals im Array erscheint? – mba12

+0

Ich habe gerade diesen Code auch ausgeführt und es hat funktioniert. Danke auch für die Erklärung, die total Sinn macht. Ich habe die obige Antwort richtig gemacht, weil ich die Pause so gebraucht habe, wie ich es brauchte. Diese Antwort war sehr hilfreich, aber ich sehe es gerne auf verschiedene Arten. – CharlieLily