javascript - 用于匹配属性名称的简写对象初始值设定项语法

标签 javascript object-literal shorthand

有时我发现自己需要使用与另一个对象的属性匹配的属性来初始化一个对象。当属性名称相同时,我希望能够使用简写语法。

(出于本问题中示例的目的,我将仅将附加属性保留为 tag: 1 属性,并且我将重用 message 在后续示例中作为信息的输入/源。我还指出了 message 的额外 unwanted 属性,因为我正在挑选属性并且不打算只需使用 Object.assignmessage 的所有属性分配给 result)

const message = {
  person: {
    name: 'John'
  },
  unwanted: 'x'
};

let result = { person: message.person, tag: 1 };  // Looking for shorthand for this

为了制定上面的 result 对象,我需要输入 person 两次。我想一定有一种简写方法可以做到这一点。我期望它起作用的理由是存在像 ES2015 Shorthand property names 这样的功能。和 Destructuring assignment 。例如:

const { person } = message;  // destructing assignment
let result = { person, tag: 1 };  // shorthand property name for `person`

这将创建一个名为 person 的额外变量,其值为 message.person,结果将具有一个名为 person 的属性具有所需的值。但是,如果没有变量已经存在,那么我不知道在这种情况下如何使用速记。而且我还没有找到将这两个语法特征结合在一起应用的方法。

这是我对语法的第一次直观猜测:

// hoping destructuring assignment is allowed in object literal
let result = { {person} = message, tag: 1 };  // it is not legal :(

我的第二个猜测是:

// hoping that a property name would magically be inferred from `person`
let result = { message.person, tag: 1 };  // it is not legal :(

作为最后的手段,我尝试了Object.assign,但它复制了不需要的属性,并且不只挑选person属性消息

let result = Object.assign({ tag: 1 }, message);  // Assigns unwanted properties :(

所以到目前为止我拥有的最好的是 { person: message.person, tag: 1 }

是否有速记初始化语法来实现此目的?

最佳答案

The best I have so far is { person: message.person, tag: 1 }.

Is there shorthand initializer syntax to achieve this?

不,这仍然是他们要走的路。

hoping that a property name would magically be inferred from person

let result = { message.person, tag: 1 };

ECMAScript Shorthand Property Assignment Improvements proposal这正是允许的。不幸的是,它仍处于阶段 0 :-/

关于javascript - 用于匹配属性名称的简写对象初始值设定项语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67989808/

相关文章:

javascript - 帮助向对象文字添加新属性

JavaScript onload() 函数

javascript - 在 javascript 中创建对象/结构的最佳方式

javascript - 声明 json 的性能 - JSON.parse 与对象文字

javascript - 访问对象字面量函数内的Jquery对象变量

html - Reactjs 中的 Props 简写

javascript - 使用 getComputedStyle().getPropertyValue() 获取边框值? (莫斯拉,FF)

javascript - JS严格速记对比

javascript - Javascript 中的窗口 ['Map' 是什么意思

javascript - 将多个文件注入(inject)书签