三目运算符 - 三个条件

3

我希望用三目运算符重写这段代码。我认为需要两个运算符。

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;

这是否是等价的?

2
是的... ... ... - CertainPerformance
1
为什么你想把它重写成条件运算符呢?这样不够清晰,也没有节省足够的空间来值得这样做。你只有一行代码而不是五行 - 你的缩小器会比这更好地完成工作。如果你不想阅读所有五行代码,那么大多数代码编辑器都带有代码折叠功能,可以折叠这样的块。然而,使用 if 语句的清晰度和理解和修复代码的速度可能会抵消链式条件所具有的任何优势。 - VLAZ
@VLAZ 我明白你的意思。我只是好奇如何编写具有超过2个选项的三元运算符。我同意if语句更容易理解正在发生的事情。 - mph85
3个回答

3
如果你需要进行排序,你可以计算这两个值之间的差值。
data.sort((a, b) => a.quantity - b.quantity); // ascending
data.sort((a, b) => b.quantity - a.quantity); // descending

两个值的delta是什么意思? - mph85
1
它是差异,返回所需值的相同符号(正数、负数或零)。 - Nina Scholz
那么,在三元运算符的哪里可以添加它? - mph85
1
@mph85 你可以在排序时使用它,如下所述:arr.sort((a, b) => a.quantity - b.quantity) - VLAZ
请注意,data.sort((a, b) => a.quantity - b.quantity); 只适用于数字(以及布尔值和字符串形式的数字)。因此,如果您的数组包含普通字符串并且您想按字母顺序对其进行排序,则此方法不起作用。 - nick zoum

1

是的,它们是等价的

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

(如果a.quantity大于b.quantity,则返回-1;如果a.quantity小于b.quantity,则返回1;否则返回0。)

这个答案和5分钟前提供的第一条评论有什么区别? - nick zoum
没关系,谢谢你确认了一下,但下次除非我犯了错误或者其他情况,否则请写一个评论。 - mph85
1
@nickzoum 嗯,既然这是一个答案。评论不应被视为答案,实际上应该被视为短暂的东西。如果那个评论明天消失了,那么没人会知道它是“是”还是“不是”。另一方面,这个问题肯定在某个时候得到了回答——有一个有效的论点认为它并不真正需要答案。 - VLAZ

0
或者只是
return (a.quantity < b.quantity) - (b.quantity < a.quantity)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接