代码之家  ›  专栏  ›  技术社区  ›  Wyck

我可以将一个属性分解为一个对象文本的相同属性吗?

  •  1
  • Wyck  · 技术社区  · 4 年前

    这是Node.js REPL:

    > action = {type: 'build', index: 42 }
    { type: 'build', index: 42 }
    > { name: 99, {index : action} }
    { index: { type: 'build', index: 42 } }
    

    去哪了 name: 99 走吧?

    我希望: { name: 99, index: 42 } . 显然我的尝试是错的。

    一种方法是,如果不进行解构:

    { name: 99, index: action.index }
    

    但是,我怎样才能得到我所希望的 {名称:99,索引:42} 使用某种破坏……或者更具体地说,用经济的语法,不用说 index 两次?

    1 回复  |  直到 4 年前
        1
  •  2
  •   Jonas Wilms    4 年前

    不,不可能。解构语法的计算结果为 被解构的值 ,所以 ({ a } = b) 评估为 b . 因此,无法在对象文本中使用解构。此外,还没有其他方法可以做到这一点。

    一个 language proposal 这将允许语法

     { action.index }
    

    似乎离标准化还很远。


    附带说明:您的尝试没有成功,因为它实际上只构建了一个对象。外部 {} 被解释为块语句 name: 作为一个标签,如下 , 作为逗号运算符,因此 {} 在表达式上下文中,并被解释为对象文本:

    { // block
      name: // label
      (99, {index : action}) // comma operator
    }