在三元语句中清理代码

时间:2016-05-12 18:23:54

标签: javascript if-statement ternary

我试图计算字母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.

1 个答案:

答案 0 :(得分:2)

为什么不添加布尔值?

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

实施例

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

虽然您只需要区别,但您可以使用单个变量并计算x,然后计算o。返回值不是count的值。

&#13;
&#13;
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>');
&#13;
&#13;
&#13;