gpt4 book ai didi

javascript - JS 中嵌套三元运算符的替代方案

转载 作者:行者123 更新时间:2023-12-02 23:57:33 25 4
gpt4 key购买 nike

我个人很喜欢三元运算符,以我的拙见,它们使复杂的表达式变得非常容易理解。拿这个:

  const word = (distance === 0) ? 'a'
: (distance === 1 && diff > 3) ? 'b'
: (distance === 2 && diff > 5 && key.length > 5) ? 'c'
: 'd';

但是,在我们项目的 ESLINT 规则中,嵌套三元运算符是被禁止的,所以我必须摆脱上述规则。

我正在尝试寻找这种方法的替代方案。我真的不想把它变成一个巨大的 if/else 语句,但不知道是否还有其他选择。

最佳答案

您的替代方案基本上是:

  1. 您不想做的if/else
  2. if/else 组合的 switch

我试图想出一个合理的查找 map 选项,但它很快就变得不合理。

我会选择#1,它没那么大:

if (res.distance == 0) {
word = 'a';
} else if (res.distance == 1 && res.difference > 3) {
word = 'b';
} else if (res.distance == 2 && res.difference > 5 && String(res.key).length > 5) {
word = 'c';
} else {
word = 'd';
}

如果所有的大括号和垂直尺寸让您烦恼,没有它们,它几乎和条件运算符版本一样简洁:

if (res.distance == 0) word = 'a';
else if (res.distance == 1 && res.difference > 3) word = 'b';
else if (res.distance == 2 && res.difference > 5 && String(res.key).length > 5) word = 'c';
else word = 'd';

(我不提倡这样做,我从不提倡去掉大括号或将 if 后面的语句放在同一行,但其他人有不同的风格观点。)

在我看来,#2 更笨重,但这可能更像是一种风格注释:

word = 'd';
switch (res.distance) {
case 0:
word = 'a';
break;
case 1:
if (res.difference > 3) {
word = 'b';
}
break;
case 2:
if (res.difference > 5 && String(res.key).length > 5) {
word = 'c';
}
break;
}
<小时/>

最后,我提倡这一点,您可以利用 JavaScript 的 switchB 中不常见的事实。 -syntax 语言系列:case 语句可以是表达式,并按源代码顺序与 switch 值进行匹配:

switch (true) {
case res.distance == 0:
word = 'a';
break;
case res.distance == 1 && res.difference > 3:
word = 'b';
break;
case res.distance == 2 && res.difference > 5 && String(res.key).length > 5:
word = 'c';
break;
default:
word = 'd';
break;
}

这有多丑? :-)

关于javascript - JS 中嵌套三元运算符的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32289340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com