如何在 Object 字面键中使用表达式?

How to use an expression in the Object literal key?

提问人:Eli Tref 提问时间:12/14/2022 更新时间:12/14/2022 访问量:131

问:

我有一个开关^

  let s = "aaa"

  switch (true) {
    case s.includes('a'):
      url = 'https://a.com/wp-admin/post-new.php'
      console.log(url)
      break
    case s.includes('b'):
      url = 'https://b.com/wp-admin/post-new.php'
      console.log(url)
      break
    default:
      console.log('default')
      break
  }

我正在尝试将其更改为文字对象,但我无法弄清楚如何正确指定 s.includes 条件作为对象键

  const objLit = (s) => {
    const cases = {
      //s.includes('a'): 'https://a.com/wp-admin/post-new.php',
      [`${s.includes('a')}`]: 'https://a.com/wp-admin/post-new.php',
      //s.includes('b'): 'https://b.com/wp-admin/post-new.php',
      [`${s.includes('b')}`]: 'https://b.com/wp-admin/post-new.php',
    }

    let url = cases[s]
    return url

  }

  console.log(objLit(s))

虽然这不会引发错误,但它不起作用。

javascript switch-statement 对象文字

评论

0赞 jonrsharpe 12/14/2022
关键是错误的;查看您正在创建的对象,属性名称是 和 。(这也不是一个很好的方法。"false""true"
0赞 Nick Parsons 12/14/2022
这种东西不适合用于对象。最好作为 if 语句

答:

0赞 Quentin 12/14/2022 #1

你不能。属性名称为字符串或符号。

使用语法时,将在创建对象时计算表达式。[]

不能分配在查找时计算的代码。这就是和/是做什么用的。switchifelse

在您的例子中,由于返回一个布尔值,因此您只是在创建一个具有名为 和 的属性的对象。includes()"true""false"

你可以说,但这将是一个可怕的黑客。let url = cases.true

评论

0赞 Eli Tref 12/14/2022
谢谢。我想简化代码。太糟糕了,这是不可能的:(