2016-11-10 1 views
0

Ich habe zwei Arrays, eines mit Steuercodes (emptaxdeductcode), und eins mit den Beträgen für diese Steuercodes (emptaxamt) bezahlt.Finden von Summen bestimmter Strings in einem Array

Ich versuche die Beträge für nur die Steuercodes mit der Endung 31 zu finden. Diese Steuercodes haben eine unterschiedliche Anzahl an Zeichen, aber die Zeichen, die ich brauche, sind immer 12 Zeichen.

Der Versuch, eine einfache for-Schleife zu verwenden, aber es erscheint 3. Zeile zu brechen werden Es ist immer 0, auch für diejenigen darstellt, die die Steuer-Code (s) in Frage:

var returnedValue = 0; 
for (var q = 0; q < emptaxdeductcode.length; q++) { 
    if (emptaxdeductcode[q].substring(10,11) == "31") { 
     returnedValue += emptaxamt[q]; 
    } else { 
     0; 
    } 
} 
returnedValue; 

Ich habe versucht, das folgende nur als ein Test und es ist wahr: (Dieser Steuercode ist nicht immer in [5], also kann ich nicht gerade das verwenden. Außerdem gibt es Leute, die mehrere Steuercodes haben, die in 31 enden)

if (emptaxdeductcode[5].substring(10,11) == "31") { 
    "TRUE"; 
} else { 
    "FALSE"; 
} 

So muss es der Teilstring innerhalb der for-Schleife sein, die pro verursacht befleckt. Jede Anleitung würde sehr geschätzt werden!

Edit: Hier ist ein Beispiel für die Daten. Entschuldigung, wenn dies seltsam exportiert - nicht genau, wie man Tabellen erstellt:

emptaxdeductcode | emptaxamt

--- | ---

00-10 | 55.36

00-11 | 8.33

00-12 | 35.63

39-20 | 17.64

39-22 | 0.40

390770040-31 | 9.48

390770040-32 | 2.00

Edit2: Diese Software, die ich benutze, um diesen Bericht zu erstellen, unterstützt nicht viele JS-Dienstprogramme/Bibliotheken. Viele Posts auf Stackoverflow mit ähnlichen Problemen wurden mit 'Prototyp'-Funktionen oder AngularJS und ähnlichen Dingen gelöst. Leider wird das bei mir nicht funktionieren.

+1

Wie bricht es in Zeile 3? – epascarello

+1

versuche, den Wert von emptaxdeductcode [q] vor der Verarbeitung zu protokollieren und zu sehen, was es vor dem Fehler war. emptaxdeductcode kann einen beliebigen Nullwert enthalten? – alebianco

+1

können Sie zeigen, wie Ihre Daten aussehen? –

Antwort

0

Ich denke, Ihr Hauptproblem ist, dass Sie nur ein Zeichen aus der Zeichenfolge gerade liest substring anstatt 2.

Ich glaube, Sie

wollen
emptaxdeductcode[q].substring(10,12) 

statt.

Hier ist ein Beispielcode und ein JSFiddle.

var emptaxdeductcode = ["123451234531", "123451234532"]; 
var emptaxamt = [10, 20]; 

var returnedValue = 0; 
for (var q = 0; q < emptaxdeductcode.length; q++) 
{ 
    if (emptaxdeductcode[q].substring(10,12) == "31") { 
     returnedValue += emptaxamt[q]; 
    } else { 
     0; 
    } 
} 
alert(returnedValue); 

JSFiddle Code

+0

Danke Chris. Ich ging und probierte das - leider kein bueno. Sogar das Ändern in nur Teilzeichenfolge (10) funktioniert nicht. –

+0

Sehr seltsam. Es funktioniert perfekt in der jsFiddle. Versuchen Sie, die Ausgabe davon auf der Konsole in Ihrer App zu protokollieren. console.log (emptaxdeductcode [q] .substring (10,12)); Sagen Sie uns, was Sie bekommen. –

0

Wenn Sie

console.log(emptaxdeductcode[q].substring(10, 11)); 

tun, werden Sie, dass Sie wieder 3, nicht 31 erhalten sehen.So müssen Sie es stoßen auf 12.

var emptaxdeductcode = ["00-10", "00-11", "00-12", "39-20", "39-22", "390770040-31", "390770040-32"], 
 
    emptaxamt = [55.36, 8.33, 35.63, 17.64, 0.40, 9.48, 2.00]; 
 

 
var returnedValue = 0; 
 
for (var q = 0; q < emptaxdeductcode.length; q++) { 
 
    if (emptaxdeductcode[q].substring(10, 12) == "31") { 
 
    returnedValue += emptaxamt[q] 
 
    } 
 
} 
 

 
console.log(returnedValue);

ich persönlich entweder

var code = emptaxdeductcode[q].substr(-2); 

oder

var code = emptaxdeductcode[q].split("-").pop(); 

var emptaxdeductcode = ["00-10", "00-11", "00-12", "39-20", "39-22", "390770040-31", "390770040-32"], 
 
    emptaxamt = [55.36, 8.33, 35.63, 17.64, 0.40, 9.48, 2.00]; 
 

 

 
var total = emptaxdeductcode.reduce(function(total, code, ind){ 
 
    if (code.split("-").pop() === "31") { 
 
     total += emptaxamt[ind]; 
 
    } 
 
    return total; 
 
}, 0); 
 

 
console.log(total);
verwenden würden,

Verwandte Themen