如何解决创建指向同一对象的多个键是否有效?
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;
});
countriesObject["Poland"] // →
countriesObject["POL"] // → The same object
countriesObject["616"] // →
我的问题是,这是否被视为一种好的做法,还是有一些更好的方法来实现相同或相似的结果?
谢谢!
解决方法
这很好,因为您正确地注意到,所有这些键都将指向同一对象。我在这里看到的最大问题是,使用这种方法很容易降低代码的可读性。假设我们有这个片段:
console.log( countriesObject[id] );
问题是,这里的ID是什么?它是全名吗?还是Alpha?或代码?您可能根本不在乎,是的,但是如果您这样做,请考虑给他们其他结构:
const countriesObject = countries.reduce((object,country) => {
const { name,alpha,code } = country;
const countryCopy = { ...country };
// it makes sense to place them on the same line to show the intent
object.name[name] = object.code[code] = object.alpha[alpha] = countryCopy;
return object;
},{ name: {},code: {},alpha: {} });
另一个潜在的问题是,您将无法轻易地从该对象中删除国家/地区;仅删除指向它的单个键是不够的,您必须删除所有三个键。但这似乎不是一件大事。这看起来更像是一本字典。
,您确实可以这样写:
var countries = {[
"poland": {
alpha: "POL",code: "616"
},"hungary": {
alpha: "HUN",code: "348"
}
]}
像这样访问每个国家:
var poland = countries.poland;
这反过来会产生更具可读性的代码:
var alpha = countries.poland.alpha;
代替
var alpha = countries[0].alpha;
但是没有设置首选项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。