繁体   English   中英

正确嵌套三元运算符

[英]Nesting ternary operator properly

我正在使用框架显示一个动物表,这限制了我使用单个三元运算符来显示和格式化我的文本,这个想法是:如果对象包含animalType,animalType.name和animalType.id,那么检查是否由名称+ id组成的字符串超过10个字符,截断文本,否则如果小于10,则显示整个文本,如果它们不退出,则显示空标题,以下是我将如何使用常规写入其他声明:

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 web文档,我了解到多个条件可以通过以下方式传递:

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语句中那样,如何使用三元运算符编写相同的逻辑?

我会像这样写你的情况,所以我不写一千次动物类型:

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

这可以用这样的三元运算符:

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

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

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

没有这个明确的包围,这是我的经验,它可能会失败。

在javascript中你还应该能够将你的逻辑包装成一个函数,无论你想放置三元函数只需要放入函数()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM