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



我在网上找到了这个片段,我正试图找出如何在plan-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 ? 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;
}
}

您的第一部分是对的,但下一部分不是。此:

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)

最新更新