【问题标题】:Nesting ternary operator properly正确嵌套三元运算符
【发布时间】:2019-06-23 18:52:52
【问题描述】:

我正在使用框架显示带有动物的表格,这限制了我使用单个三元运算符来显示和格式化我的文本,想法是这样的:如果对象包含 animalType、animalType.name 和 animalType.id,那么检查由 name + id 组成的字符串是否长于 10 个字符,截断文本,否则如果它小于 10,则显示整个文本,如果它们不存在,则显示一个空标题,这就是我的写法使用常规 if else 语句:

if(animalType && animalType.name && animalType.id) {
  if ((animalType.name + animalType.id).length > 10) {
    return animalType.name + animalType.id.slice(0, 10) + '......'
  } else if ((animalType.name + animalType.id).length < 10) {
    return animalType.name + animalType.id
  }
} else {
  return ''
}

通过阅读 mdn 网络文档,我了解到可以通过多个条件:

condition1 ? value1 : condition2 ? value2

这是我使用三元运算符的尝试:

animalType && animalType.name && animalType.id
  ? (animalType.name + animalType.id).length > 10
  : (animalType.name && animalType.id).slice(0, 10)
  : (animalType.name + animalType.id).length < 10
  ? animalType.name && animalType.id
  : ''

但是我不知道如何包装三元运算符,以便它在评估名称和 id 是否存在后开始检查,就像在常规 if else 语句中所做的那样,我该如何编写相同的逻辑使用三元运算符?

【问题讨论】:

  • 首先你必须修复你不匹配的括号。
  • 你的括号不正确。
  • 你能声明和使用函数吗?
  • 顺便说一句,当字符串正好有 10 个字符时,您的代码不会执行任何操作。
  • 我看到了括号,它只是为了得到这个想法的伪代码,将编辑代码

标签: javascript


【解决方案1】:

只需遵循这种括号方式,您可能需要调整逻辑,以便您的下一个条件始终遵循: 并且您必须准确地了解括号,在您的问题中甚至有未闭合的括号!如果您需要这样,请使用突出显示开始和结束括号的文本编辑器

condition ? value : (condition ? value : (condition ? value : (and ? so : on) ))

如果没有这个明确的括号,我的经验是它可能会失败。

在 javascript 中,您还应该能够将您的逻辑包装到一个函数中,并且无论您想放置三元组的任何位置,只需放置 function()

【讨论】:

  • 括号是多余的,除了在 PHP 中,它默认将它们向后。
  • @DavisHerring 如果您遵循condition ? value : value 之类的简单模式,那是正确的,但如果您使用像 OP 的 (animalType.name + animalType.id).length &lt; 10 这样的进一步运算符和评估,我的经验是 js 将无法正确解析它跨度>
【解决方案2】:

我会这样写你的案例,这样我就不会写上千遍animalType:

if(conditionA) {
    if(conditionB) {
        return value1
    } else if (conditionC) {
        return value2
    }
} else {
    return value3
}

你可以像这样使用三元运算符:

return conditionA
    ? conditionB
        ? value1
        : conditionC
            ? value2
            : undefined
    : value3

【讨论】:

  • 哦,是的!完全没有得到问题真正想要的东西。我的错。编辑:你确定吗?我并不完全清楚这个问题在问什么,所以我不相信我偏离了标准。 ://
猜你喜欢
  • 2013-08-19
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 2014-10-02
  • 1970-01-01
相关资源
最近更新 更多