【问题标题】:(Javascript) multiple condition set for ternary operator issue(Javascript) 为三元运算符问题设置多个条件
【发布时间】:2023-03-03 20:03:03
【问题描述】:
for (var days = 1; days <= 31; ++days) {
    console.log(
        (days == (1, 31, 21) ? days + 'st':'') ||
        (days == (2, 22) ? days + 'nd':'') ||
        (days == (3, 23) ? days + 'rd':'') ||
        days + 'th'
    );
}

试图显示 (1st, 2nd, 3rd) (21st, 22nd, 23rd) (31st) (multiple th) 但是我在这里得到一个奇怪的结果,我不太确定我做错了什么,任何帮助将不胜感激。

我确实尝试用谷歌搜索并弄清楚这一点,承诺,只是希望能得到一个相对详细的解释,说明它为什么表现得很奇怪。

【问题讨论】:

  • 我建议先在ifs 中完整地编写您的代码。然后尝试使用三元运算符缩短它,如果必须的话。
  • 另外,days == (1, 31, 21) 也不行。虽然它不是无效的语法,但它不会做你想要的。
  • @Cerbrus,谢谢你的回复,我知道现在该做什么了 :)

标签: javascript conditional ternary-operator


【解决方案1】:

您输入了一些语法正确的代码,但这并不意味着您显然期望它的意思。

这个:

(days == (1, 31, 21) ? days + 'st':'')

实际上与

完全相同
(days == 21 ? days + 'st':'')

(1, 31, 21) 子表达式涉及逗号运算符,它允许对一系列表达式(可能带有副作用)进行求值。整体值为最后一个表达式的值。

如果你想将一个值与一个可能性列表进行比较,通常你可以

  • 使用由|| 连接的==(或===)比较序列;
  • switch 语句与case 子句组一起使用;
  • 使用.indexOf() 在数组中查找值。

在这种特殊情况下,我可能会创建一个包含后缀的数组,然后对其进行索引:

var suffixes = Array.apply(null, new Array(32)).map(function() { return "th"; });
suffixes[2] = suffixes[22] = "nd";
suffixes[1] = suffixes[21] = suffixes[31] = "st";
suffixes[3] = suffixes[23] = "rd";

然后你可以按天数索引到数组中以获得后缀。

【讨论】:

  • 替代:((days % 10 === 1 &amp;&amp; days !== 11) ? days + 'st':'')
  • 对!有道理,谢谢你的解释(反应也很快!)
猜你喜欢
  • 2015-05-20
  • 2019-01-22
  • 2013-06-06
  • 2012-09-14
  • 1970-01-01
  • 2011-06-26
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多