【发布时间】:2021-01-25 19:56:58
【问题描述】:
我有一系列国家/地区,每个国家/地区都有三个属性。
const countries = [
{ name: "Poland", alpha: "POL", code: "616" },
{ name: "Hungary", alpha: "HUN", code: "348" },
// and so on...
]
稍后我想通过这些属性轻松访问每个国家/地区。
我正在考虑将此数组简化为一个对象,该对象将为每个国家/地区提供三个键,指向同一个国家/地区对象。
类似这样的:
const countriesObject = countries.reduce((object, country) => {
const { name, alpha, code } = country;
// Create individual country object
object[name] = { ...country };
// Reference just created country object
object[code] = object[name];
object[alpha] = object[name];
return object;
});
最后,我可以通过名称、代码或 alpha 访问每个国家/地区对象。
countriesObject["Poland"] // →
countriesObject["POL"] // → The same object
countriesObject["616"] // →
我的问题是,这会被认为是一种好的做法,还是有一些更好的方法可以达到相同或相似的结果?
谢谢!
【问题讨论】:
-
这对我来说听起来像是过早的优化
-
那么将这些国家存储为一个数组并使用
.find()方法获取每个国家/地区就可以了吗? -
我暂时说是的,最好的方法是衡量实际性能
-
这些看起来像 ISO3166-1 国家代码。如果是这样的话,目前有 249 个国家有明确的代码。所有名称、字母和代码都是唯一的,并且不会经常更改,所以为什么不简单地在静态 js 文件中定义变量并在需要时加载,而不是在每个使用它们的 HTML 页面中即时创建它们?但是,我支持 sitek94 - 为什么不简单地使用
.find()?您多久需要从变量而不是数组中查找值,因为您不知道它是名称、字母还是代码值?为什么其余的代码/页面不提供那个位? -
@ATD "为什么不简单地在静态 js 文件中定义变量并在需要时加载它" 我一直在解决解决方案如此简单的问题。我制作了一个静态文件,非常适合我的需求。谢谢你:)
标签: javascript javascript-objects pass-by-reference