2016-05-12 7 views
1

文字xと文字oが文字列に表示されている回数を数えようとしていますが、それらが同じ回数表示されている場合はtrueを返し、そうでない場合はfalseを返します。3進文でのコードの整理

私はこの問題を完了しましたが、3つのステートメントを使用すると、3つの操作が3つのステートメントで必要なように見えるため、余分な条件を作成する必要がありました。文字列で不要な条件を作成せずに三項ステートメントを使用する方法はありますか、またはifステートメントを使用する必要がありますか?

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

これ、スタックコードレビューにする必要があります質問です。まず文字を数えようとすると、linqやregexを使うことができますが、これはコードが少なくて済むでしょうが、もしあなたの三元語が好きでなければifを使います。 –

答えて

2

なぜブール値を追加しないのですか?

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

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

あなただけの違いを必要としながら、あなたは、単一の変数を使用してxoのためのダウンのためにカウントアップすることができます。戻り値は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

と「その他」はどうですか? – ceadreak

+0

リターンはこの 'return ex === oh'です。 –

関連する問題