2017-02-08 2 views
0

enter image description heregespaltet Werte in Schleifen

Ich schlage vor, u dieses Bild zu betrachten Hinzufügen und u schauen dann auf den Code habe ich geschrieben:

function addNumbers() { 
    var splitted = document.getElementById("listInput").value.split(" "); 

    for(i = 0; i <= splitted.length; i+=1) { 
     document.getElementById("resultNumberTotal").value = splitted[i]; 
    } 
} 

ich den Wert aus dem Feld nehme die sagt " Geben Sie eine Liste von Zahlen und/oder Wörtern ein "und ich teile sie auf. Ich habe es geteilt, also habe ich alle Nummern wie "1 2 3" und kann sie hinzufügen. Ich benutze die for-Schleife dafür. Die for-Schleife durchläuft jede Zahl und fügt sie dann hinzu. Aber wenn ich den Knopf drücke, zeigt es mich undefiniert an.

Warum werde ich undefiniert?

+0

Zeigen Sie uns die HTML erlauben, wo Sie alle Elemente mit IDs definiert. Erzählen Sie uns auch ** welche ** Variable nicht definiert ist. – csmckelvey

+0

Warum nicht nur 'für (i = 0; i Hackerman

+0

es ist, weil 'i <= splitted.length', geht Ihr Code aus Array (da' = ', da Array Start von 0 (Null), nicht 1) ... richtig wird sei 'i nelek

Antwort

0

Sie werden undefiniert, weil Sie den Wert des letzten Elements des Arrays anzeigen und nicht das Sum ausführen, wie Sie in der Frage erwähnten.

Der folgende Code überschreibt immer den Wert resultNumberTotal durch den Wert splitted[i]. Da Ihre for -Schleife für i <= splitted.length es den Index erreicht, die nicht in dem Array nicht vorhanden ist, wenn Sie eine Immobilie erhalten, die auf ein Objekt nicht existiert, erhalten Sie undefined

for(i = 0; i < splitted.length; i+=1) { 
     document.getElementById("resultNumberTotal").value = splitted[i]; 
    } 

Also, das zu tun Summe, müssen Sie den Code wie

function addNumbers() { 
    var splitted = document.getElementById("listInput").value.split(" "); 
    var total = 0;  
    for(i = 0; i < splitted.length; i++) { 
     var numberValue = +splitted[i]; 
     if(!isNaN(numberValue)){ 
     total = total + numberValue ; 
     } 

    } 
    document.getElementById("resultNumberTotal").value = total; 
} 
+0

Ich denke in den zweiten Code Schnipsel Sie wollten die Aktualisierung von .value außerhalb der Schleife verschieben und ihm 'total' zuweisen – noggin182

+1

@ noggin182; ja das ist richtig. Der Code wurde aktualisiert. – Agalo

+1

Sollte '.value = total' sein. – mhodges

0

Sie müssen bis die Zahlen irgendwie machen hinzuzufügen, entweder den += Operator oder durch so etwas wie .reduce() mit wie ich weiter unten getan haben.

function addNumbers() { 
 
    var val = document.getElementById("listInput").value; 
 
    document.getElementById("resultNumberTotal").value = val.split(" ").reduce(function(runningTotal, currentArrayElement) { 
 
    // make sure the value they typed is a number 
 
    // if not, fail gracefully and simply ignore it 
 
    if (!isNaN(Number(currentArrayElement))) { 
 
     // if it is a number, add it to the running total 
 
     runningTotal+= Number(currentArrayElement); 
 
    } 
 
    return runningTotal; // return the running total 
 
    }, 0); // start with 0 as the initial value for runningTotal 
 
}
<input type="text" id="listInput" placeholder="insert values here..." style="width: 300px;" /> 
 
<button onclick="addNumbers()">Add Numbers</button> 
 

 
<br/> 
 
<br/> 
 
<hr/> 
 

 
Number Total: <input id="resultNumberTotal"/>

+0

Vielen Dank, dass dein Code tatsächlich funktioniert hat, aber ich verstehe nicht, was ".reduce" ist und was curr ist. Kannst du das erklären? –

+0

@DONTRU reduce ist eine Array-Iterationsfunktion, die eine Sammlung von Elementen (Array) auf einen einzigen Wert "reduziert", sei es eine Zeichenfolge, eine Zahl, ein Objekt usw. In diesem Fall wollen wir ein Array von Werten auf eine einzige Zahl reduzieren, also reduzieren ist perfekt für den Job. Die Argumente im Reduce-Callback sind (in der Reihenfolge) die laufende Summe oder der einzelne Wert, auf den Sie reduzieren (wieder, ob es ein Objekt, eine Zeichenfolge, eine Zahl usw. ist) und der zweite Parameter ist das aktuelle Element in der Array, das es betrachtet. – mhodges

+0

@DONTRU Ich habe meinen Beitrag aktualisiert, um deutlich zu machen, was der Code macht. Siehe auch die Dokumentation für '.reduce()' hier: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce – mhodges

0
function addNumbers() { 
var splitted = document.getElementById("listInput").value.split(" "); 
//make sure that the values are in a number format 
document.getElementById("resultNumberTotal").value = splitted.reduce(function(a, b) {return Number(a) + Number(b);}, 0) 
} 

für die beste Praxis stellen Sie sicher, dass Zahl nur für die Eingabefelder :) viel Glück

Verwandte Themen