arrays - 为什么我不能使用模板文字在新对象中创建字符串作为键?
问题描述
我有一些对象数组,其中有一个示例对象:
{
id: 10,
name: "Clementina XYZ",
username: "Moriah.Stanton",
email: "foo.bar@quux.biz",
address: {
street: "Kattie Turnpike",
suite: "Suite 555",
city: "Lebsackbury",
zipcode: "31428-2261",
geo: {
lat: "-38.2386",
lng: "57.2232"
}
},
phone: "555-648-3804",
website: "example.com",
company: {
name: "Acme LLC",
catchPhrase: "Centralized empowering task-force",
bs: "target end-to-end models"
}
}
我还有一个功能可以很好地找到与它们user
相同的 scompany.name
并map
在它们之上创建具有,和的对象。name
address
phone
function buildCompanyDirectory(company, directory) {
return directory
.filter(user => user.company.name === company)
.map(({ name, address, phone }) => ({
name,
address,
phone
}));
}
现在,一个新任务:
// TODO: Build an Array of company directories
所以,我希望有一个由 s 组成的最终数组,这些 s 是从 s和s的对象数组派生而来user.company.name
的。所以,像:name
address
phone
[{
"Hoeger LLC": [{ }]
}]
作为解决这个问题的一部分,我觉得(显然 JS 不同意!)我应该能够使用模板文字来使用从另一个对象的值派生的 s创建新对象。
该非工作代码如下所示:
const directories = users.map((user) => {
return {
`${user.company.name}` : buildCompanyDirectory(company.name, users) // ERROR: Property assignment expected
};
});
看来我不需要求助于Object.keys()
或类似的东西。这感觉更像是某种类型的“语法”错误或只是错误的符号。
当然,我想知道解决这个问题的最简单方法!谢谢。
解决方案
问题是对象文字中的键构造在 JS 中是特殊情况。您可以使用文字字符串或裸标识符。
为了允许表达式作为对象字面量中的键,JS 使用以下 hack:
const a = 'aaaa';
const data = {[`this_is_${a}`]: 10}
data.this_is_aaaa === 10; // true.
其中的表达式[]
将被评估并用作键。
推荐阅读
- soap - 如何在 mule dataweave 中外部化重复的 SOAP 响应属性?
- swift - 如何知道 AVSpeechSynthesizer 何时完成了所有排队的话语。斯威夫特 4.2
- asp.net - 如何创建数据库?
- c# - 如何在 facebook sdk C# Unity 上获取国家/地区
- c# - 如何自定义 ASP.NET Core 配置文件
- c# - 将属性值转换回原始类型以与反射进行比较
- c# - facebook pager(查看更多)链接元素已定位但无法点击它
- javascript - JAVASCRIPT - 取消隐藏类
- c# - TabControl 中标签页之间共享的滚动条位置
- java - 处理 3.4 - 水模拟上的漫反射着色顶点