【发布时间】:2020-03-21 17:24:48
【问题描述】:
你能告诉我为什么方法 A 比方法 B 更好吗?
方法 A:
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;
};
谢谢
【问题讨论】:
-
为什么要考虑第二个?它进入了一个环形交叉路口(找到键,然后在数组中找到它的值)试图模拟与简单的
Array#map相同的功能。给Array#map的回调也是纯粹的,它有其隐含的好处。我真的不明白你为什么要去Object.keys()->map-> 查找任何东西的数组值。 -
请不要在 JavaScript 部分标记 typescript 代码
-
有很多方法可以让事情变得更加复杂。并不意味着它们都需要进行比较……
-
方法 B 只是尝试成为方法 A 的额外步骤。方法 A 使用对象本身来获取值,方法 B 必须使用键,然后找到对象,以获取值。密钥仅作为获取对象的一种方式有用,因此您应该更喜欢从一开始就拥有对象本身的方法。
-
@TKoL 并且如果出于任何原因需要密钥 is,那么您仍然可以从第二个参数获取 if 到
.map回调。
标签: javascript arrays object javascript-objects