2016-05-12 69 views
1

我正在嘗試計算字母x和字母o出現在字符串中的所有時間,如果它們出現相同的次數並且返回true,否則返回false。清除三元語句中的代碼

我已經完成了這個問題,但是當使用三元語句時,它迫使我創建一個額外的條件,因爲您似乎需要在三元語句中執行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>');

雖然你只需要區別,你可以使用一個變量,上數x和下來o。返回值不是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

和'other'呢? – ceadreak

+0

返回是'這個返回EX ===哦',所以沒有其他 –