javascript - Objecy.keys().map() VS Array.map()
问题描述
你能给我一个论据,为什么方法 A 比方法 B 更好。
方法一:
const transformCompanyOptions = (companies: Array<{id: string, name: string}>, selectedId: string) => {
return companies.map(key => {
return {
value: key.id,
label: key.name,
checked: key.id === selectedId
}
})
};
方法 B:
const transformCompanyOptions = (companies: Array<{id: string, name: string}>, selectedId: string) => {
const ret = Object.keys(companies).map((key) => {
const newCompany = {};
newCompany['value'] = companies[key].id;
newCompany['label'] = companies[key].name;
if (companies[key].id === selectedId) {
newCompany['checked'] = true;
}
return newCompany;
});
return ret;
};
谢谢
解决方案
方法 A 是:
- 更短
- 不那么冗长
- 清洁器
Object.keys
具有更好的性能(您首先需要在方法 B中获取所有密钥)
此外,方法 A 可以改进:
const transformCompanyOptions = (companies: Array<{id: string, name: string}>,
selectedId: string) => {
return companies.map(c => ({
value: c.id,
label: c.name,
checked: c.id === selectedId
}))
};
正如@TKoL 在评论中所说:
尽量避免将参数
.map
作为键调用,因为它实际上是一家公司本身,而不是key
一个数组
推荐阅读
- c++ - C++20 范围的切片视图
- apache-nifi - NiFi 中 InvokeHTTP 处理器的惩罚持续时间何时开始?
- graphql - 带有数组参数的嵌套 GraphQL 查询
- bash - GIT 使用什么工具在命令行中绘制图形?
- javascript - 是否可以跟踪用户登陆的页面?
- filter - 使用 dc.js 过滤 *controls*?
- c++ - 为什么我的 UWP 游戏在发布时比在调试模式下慢?
- c++ - 为什么 Arduino (Little Endian) 上的 Sha1 没有转换为 Big Endian 工作?
- python - 503 从插件获取元数据失败并出现错误:HTTPSConnectionPool(host='oauth2.googleapis.com', port=443)
- powershell - 使用 Powershell 实现 Netscaler 自动化