试图弄清楚如何将具有多个条件的长三元运算符转换为长if语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试图弄清楚如何将具有多个条件的长三元运算符转换为长if语句相关的知识,希望对你有一定的参考价值。

我在网上找到了此代码段,并试图弄清楚如何在if语句中将其翻译为计划:

return a.price > b.price ? 1 : a.price === b.price ? a.name > b.name ? 1 : -1 : -1;

我认为,如果我写了if语句:

if (a.price > b.price) 
    return 1;
 else if (a.price === b.price) 
    return 1;
 else if (a.name > b.name) 
    return 1;
 else 
    return -1;

但是我不太确定这是什么意思,问号又是问号,冒号是同样的问题。我知道,在这种情况下,冒号可以是else if语句(按此顺序),但是问号呢?有什么提示吗?

答案
a.price === b.price ? a.name > b.name ? 1 : -1 : -1;

分离出来,看起来像:

a.price === b.price
  ? (
    a.name > b.name
      ? 1
      : -1
    )
  : -1;

内部条件为a.name > b.name ? 1 : -1

如果价格不相等,则返回-1。否则,将比较名称。要正确翻译:

if (a.price > b.price) return 1; if (a.price !== b.price) return -1; if (a.name > b.name) return 1; return -1;

如果将此用于.sort回调,则另一个与上述等效的选项是:

return a.price - b.price || a.name.localeCompare(b.name)
另一答案
a.price > b.price ? 1 : (a.price === b.price ? (a.name > b.name ? 1 : -1) : -1)

a.price > b.price ? 1 : x x = a.price === b.price ? y : -1; y = a.name > b.name ? 1 : -1;

翻译成的IF ELSE是

if(a.price > b.price)
    return 1
 else 
    if(a.price === b.price)
        if(a.name > b.name)
            return 1;
         else 
            return -1;
        
     else 
        return -1;
    

以上是关于试图弄清楚如何将具有多个条件的长三元运算符转换为长if语句的主要内容,如果未能解决你的问题,请参考以下文章

具有多个条件的JS三元函数?

具有多个条件的 if 语句

通过多个步骤将宽数据集转换为长数据集

SwiftUI:有条件的 onDelete

将三元条件运算符转换为 if 语句?

三元条件下的多个 OR 运算符,