2016-05-12 9 views
1

Ich versuche zu zählen, wie oft der Buchstabe x und der Buchstabe o in einer Zeichenkette erscheinen, und ich gebe wahr zurück, wenn sie gleich oft vorkommen und sonst falsch.Code in ternärer Anweisung bereinigen

Ich habe das Problem abgeschlossen, aber wenn ich eine ternäre Anweisung verwendete, zwang es mich, eine zusätzliche Bedingung zu erstellen, die ich nicht brauchte, da Sie anscheinend 3 Operationen in einer ternären Anweisung benötigten, also zählte ich jedes Mal, wenn etwas anderes auftauchte in einer Zeichenfolge. Gibt es eine Möglichkeit, eine ternäre Anweisung zu verwenden, ohne eine unnötige Bedingung zu erstellen, oder müsste ich if-Anweisungen verwenden?

function ExOh(str) { 
    var ex = 0 
    var oh = 0 
    var other = 0 
    for (var i = 0; i < str.length; i++) { 
    str[i] === "x" ? ex++ : str[i] === "o" ? oh++ : other++ 
    } 
    return ex === oh 
} 

console.log(ExOh("xooabcx$%x73o")); 
console.log(ExOh("xooxxo")); 
console.log(ExOh("x")); 
console.log(ExOh("")); 

//wouldn't let me just have one statement after the ternary so I created the other variable. 
+0

Dies ist eine Frage, die auf Stapel Code-Review sein sollte. Zunächst einmal, wenn Sie versuchen, Zeichen zu zählen, können Sie Linq oder Regex verwenden, die viel weniger Code wäre, aber wenn Sie nicht möchten, dass Ihre Ternär ein If verwenden. –

Antwort

2

Warum nicht den booleschen Wert hinzufügen?

ex += str[i] === "x"; 
oh += str[i] === "o"; 

Beispiel

var a = 0; 
 
a += false; 
 
document.write(a + '<br>'); 
 
a += true; 
 
document.write(a + '<br>');

Während Sie den Unterschied nur benötigen, können Sie eine einzelne Variable und für x und unten für o zählen. Der Rückgabewert ist der Nicht-Wert von count.

function ExOh(str) { 
 
    var count = 0, i; 
 
    for (i = 0; i < str.length; i++) { 
 
     count += str[i] === "x"; 
 
     count -= str[i] === "o"; 
 
    } 
 
    return !count; 
 
} 
 

 
document.write(ExOh("xooabcx$%x73o") + '<br>'); 
 
document.write(ExOh("xooxxo") + '<br>'); 
 
document.write(ExOh("x") + '<br>'); 
 
document.write(ExOh("") + '<br>');

+0

und was ist mit 'anderen'? – ceadreak

+0

die Rückkehr ist das 'zurück ex === oh', also kein anderes –