有时我发现自己需要使用与另一个对象的属性匹配的属性来初始化一个对象。当属性名称相同时,我希望能够使用简写语法。
(出于本问题中示例的目的,我将仅将附加属性保留为 tag: 1
属性,并且我将重用 message
在后续示例中作为信息的输入/源。我还指出了 message
的额外 unwanted
属性,因为我正在挑选属性并且不打算只需使用 Object.assign
将 message
的所有属性分配给 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/