尝试弄清楚如何将具有多个条件的长三元运算符转换为长 if 语句
Try to figure it out how to translate a long ternary operator with more than one condition into long if statement
我在网上找到了这个片段,我正试图弄清楚如何在计划 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 语句中翻译它:
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;
}
}