2016-03-21 6 views
2

Diese Frage muss in Javascript beantwortet werden.Wie kann ich die Summe jedes einzelnen Elements in einem Array von langen Zahlen finden?

Zum Beispiel habe ich eine Reihe von Telefonnummern:

var phoneNumbers = ['123-434-4455', '123-495-8475', '484-728-3456']; 

Die Telefonnummer bei Index 0 (123-434-4455) hinzugefügt werden würde, wie 1 + 2 + 3 + 4 + 3 + 4 + 4 + 4 + 5 + 5, summiert auf 35.

Ich vermute, dass dies eine Art von Schleife (for-Schleifen, oder die Methode .forEach) beinhalten wird, weil ich dies für mehrere Telefonnummern tun muss In einem Array, das wahrscheinlich zufällig von einem Computer generiert wird, variieren Länge und Menge.

Auch ich frage mich, ob der Bindestrich wichtig ist, in diesem Fall habe ich .replaceAll("-",""); gefunden.

Ich habe einige andere Methoden untersucht, die .split, .parsInt, .map, .toString, .Reduce,. DigitSum und mehr beinhalten. Sie scheinen ziemlich kompliziert zu sein, vor allem, weil ich in einem Anfängerkurs bin (aber ich bin völlig neu in der Programmierung - das ist mein erster Post btw). Außerdem würde ich lieber nicht die ganze Frage posten, weil ich es wirklich alleine herausfinden möchte, aber das ist der Teil, an dem ich am meisten festhalte. Verzeih mir, wenn das vorher beantwortet wurde! Wie ich schon sagte ... neu im Programmieren.

Ich muss auch bestimmen, welche Telefonnummer die letzte größte Summe von Ziffern hat, und verwenden Sie eine return-Anweisung, um die erforderliche Telefonnummer in seiner ursprünglichen Form zurückzugeben.

+0

Wie wollen Sie die Ausgabe überprüft werden kann der Ergebnisse? Als ein Array? Drucken jedes auf der Konsole? – afuous

+0

Diese Telefonnummern sind wirklich Strings, oder? Eine JavaScript-Nummer kann nicht wie 123-434-4455 aussehen. Sie können '.split (" ")' verwenden, um eine Zeichenfolge in ein Array einzelner Zeichen aufzuteilen, und dann durch dieses Array zu iterieren und die Zeichen, die wie Ziffern aussehen, zu addieren. – Pointy

+0

Guter Punkt, sie sind nicht einmal technisch Ziffern, sie sind Strings, wie die Frage in einfachen Anführungszeichen hat. Dank dafür. – TJameson

Antwort

0

Angenommen, dass phoneNumbers ein Array von Strings ist, können Sie tatsächlich das gesamte Array durchlaufen und dann in jedem Element des Arrays den String durchlaufen und prüfen, ob das Zeichen eine Zahl ist. Wenn ja, addiere es zu deiner Summe und wenn du jedes Element im Array fertiggestellt hast, hast du die Gesamtsumme dafür und du kannst es zu einem anderen Array mit deinen Summen hinzufügen.

+0

Richtig, es ist technisch eine Reihe von Strings. Ich werde in den Arrays Zitate hinzufügen. Danke, dass du das erwischt hast! – TJameson

+0

Ich habe mich etwas mehr gefragt, und es bringt eine gute Frage auf. Ja, was ist, wenn die Person (oder der Computer) einen ungültigen Schlüssel wie einen Buchstaben oder ein Symbol eingegeben hat. Ich denke, ich müsste irgendwie eine if-Anweisung mit NaN einbeziehen. – TJameson

1

Dieser Code wird es tun:

var phoneNumbers = ["123-434-4455", "123-495-8475", "484-728-3456"]; 

for (var i=0; i<phoneNumbers.length; i++) {//For every phone number 
    var total=0; //create a total variable 
    var indNumbers = phoneNumbers[i].replace(/-/g, ""); //remove all dashes 
    for (var j=0; j<indNumbers.length; j++) {//loop for all digits 
     total+=parseFloat(indNumbers[j]);//add each digit to total 
    } 
    console.log(total);//do stuff with it here 
} 

alle ziemlich Standard Javascript Sachen. Das einzige verwirrende Bit, das ich vielleicht verwendet habe, ist die .replace Methode - mein Parameter ist /-/g, der unheimlich aussehen mag, aber es ist das Äquivalent der Übergabe in "-", außer es teilt der Funktion mit, ALLE Instanzen des Bindestrichs zu ersetzen. Wenn Sie "-" übergeben, wird nur die erste Instanz ersetzt.

Wenn Sie ein Anfänger sind, die Dinge in diesem Code werden Sie darüber erfahren wollen, sind .replace, parseFloatfor Schleifen und Zugriff auf Strings mit eckiger Klammer-Notation.

+0

Das ist ähnlich dem, was ich vorher gesehen habe. Ich werde es ausprobieren. Vielen Dank! – TJameson

+0

Kein Problem. Der Code wird funktionieren, aber vergewissern Sie sich, dass Sie ihn verstanden haben, bevor Sie ihn verwenden, und versuchen Sie dann, ihn zu verbessern - was würde beispielsweise passieren, wenn eine Ihrer Telefonnummern ein Zeichen hätte, das keine Nummer oder ein Strich ist? – millerbr

+0

Danke für die zusätzlichen Informationen, ich werde definitiv alle Methoden, die Sie im Code verwendet haben, recherchieren, vor allem bevor ich versuche, sie zu verwenden. – TJameson

3

Sie können map und reduce Array Methoden verwenden:

['123-434-4455', '123-495-8475', '484-728-3456'].map(function(str) { 
    return str.split('').reduce(function(a,b) { 
    return a + (+b || 0); 
    }, 0); 
}); // [ 35, 48, 51 ] 

Einige Hinweise:

  • split('') teilt einen String in ein Array von Zeichen
  • +bb in eine Anzahl nötigt, z.B. "5" bis 5 und "-" bis NaN.
  • +b || 0 kehrt 0 wenn +b falsy ist (0 oder NaN) und +b sonst
1

var phoneNumbers = ["123-434-4455", "123-495-8475", "484-728-3456"]; 
 

 
function crossSum(arr, pos) { 
 
    var sum = 0; 
 
    var a = arr[pos].split("-").join("").split(""); 
 
    a.forEach(function(e, i) { 
 
    sum += parseInt(a[i]); 
 
    }) 
 
    return sum; 
 
} 
 

 
document.write(crossSum(phoneNumbers, 0));

Diese Funktion wird die Quersumme von Ihre Telefonnummer zurück.

Verwenden Sie einfach crossSum(phoneNumers, 0) // 0 is the fist number of phoneNumbers.

Dies wird das crossSum zurückgeben.

1

Hinzufügen auf @millerbr Antwort. Wenn Sie nicht .replace wollen verwenden, können Sie nur parseInt/parseFloat auf jedem Zeichen verwenden, wenn es nicht eine Zahl ist NaN diese Funktionen liefert, die mit isNaN() Funktion

var phoneNumbers = ["123-434-4455", "123-495-8475", "484-728-3456"]; 

for (var i=0; i < phoneNumbers.length; i++) { //For every phone number 
    var total=0; //create a total variable 
    for (var j=0; j < phoneNumbers.length; j++) { //loop for all digits 
     var parsedNumber = parseInt(phoneNumbers[j]); // parse string to number or NaN if "-" 
     if (!isNaN(parsedNumber)) { // Check if result is NaN (Not a Number). 
      total += parsedNumber; //add each digit to total 
     } 
    } 
    console.log(total);//do stuff with it here 
} 
+0

Gibt es einen großen Unterschied zwischen parseInt/parseFloat? Ich nehme an, in diesem speziellen Fall sind sie austauschbar .... – TJameson

+0

Ja, das sind sie :) –

Verwandte Themen