【问题标题】:Cleaning up code in ternary statement [duplicate]清理三元语句中的代码[重复]
【发布时间】:2016-09-08 17:56:48
【问题描述】:

我正在尝试计算字母 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.

【问题讨论】:

  • 这是一个应该在堆栈代码审查中的问题。首先,如果您尝试计算字符,您可以使用 linq 或 regex,这将减少代码,但如果您不喜欢您的三元组,请使用 if。

标签: javascript if-statement ternary


【解决方案1】:

为什么不添加布尔值?

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>');

【讨论】:

  • 那么other 呢?
  • 返回的是这个return ex === oh,所以没有其他
猜你喜欢
  • 2011-12-01
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 2018-08-01
相关资源
最近更新 更多