【问题标题】:Ternary Operator - 3 conditions三元运算符 - 3 个条件
【发布时间】:2020-01-18 00:46:54
【问题描述】:

我想用三元运算符重写它。我相信我需要 2 个操作员。

if (a.quantity > b.quantity) {
      return -1;
  } else if (a.quantity < b.quantity) {
      return 1;
  } else {
      return 0;
  }

三元

return (a.quantity > b.quantity) ? -1 : (a.quantity < b.quantity) ? 1 : 0;

这会是等价的吗?

【问题讨论】:

  • 是的…………
  • ...为什么要重写为条件运算符?它不太清楚,并且没有节省足够的空间甚至值得。你有一条线而不是 5 条线——你的缩小器会做得比这更好。如果您对阅读全部 5 行不感兴趣,那么大多数代码编辑器都带有代码折叠功能,您可以在其中折叠这些块。然而,if 语句的清晰度以及理解和修复代码的速度可能会否定链式条件具有的任何优势。
  • @VLAZ 我明白你在说什么。我只是好奇如何编写一个有两个以上选项的三元组。我同意if 声明可以更快地了解发生了什么。

标签: javascript if-statement ternary-operator


【解决方案1】:

如果你需要排序的值,你可以取两个值的增量:

data.sort((a, b) => a.quantity - b.quantity); // ascending
data.sort((a, b) => b.quantity - a.quantity); // descending

【讨论】:

  • 这两个值的增量是什么意思?
  • 这是差异,它返回所需值的相同符号(正数、负数或零数)。
  • 那么可以在哪里添加它来代替三元运算符?
  • @mph85 可以在排序的时候使用,如arr.sort((a, b) =&gt; a.quantity - b.quantity)
  • @mph85 请记住,data.sort((a, b) =&gt; a.quantity - b.quantity); 仅适用于数字(以及布尔值和字符串形式的数字)。因此,如果您的数组包含普通字符串并且您想按字母顺序对其进行排序,那么这将不起作用。
【解决方案2】:

是的,它们是等价的

return (a.quantity &gt; b.quantity) ? -1 : (a.quantity &lt; b.quantity) ? 1 : 0;

【讨论】:

  • 这个答案和 5 分钟前提供的第一条评论有什么区别?
  • 别担心,谢谢你的确认,但下次只写评论,除非我犯了错误或什么的。
  • @nickzoum 很好,这是一个答案。评论并不意味着被视为答案,并且确实应该被视为短暂的。如果明天该评论消失了,那么没有人会知道它是“是”还是“否”。再说一次,这个必须已经在某个时候得到了回答——有一个有效的论据可以证明它并不需要答案。
猜你喜欢
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
  • 2012-02-22
  • 2013-04-26
  • 2013-06-06
  • 2012-09-14
  • 2011-06-26
相关资源
最近更新 更多