[英]Is it efficient to create multiple keys pointing to the same object?
我有一系列國家,每個國家都有三個屬性。
const countries = [
{ name: "Poland", alpha: "POL", code: "616" },
{ name: "Hungary", alpha: "HUN", code: "348" },
// and so on...
]
稍后我想通過這些屬性中的任何一個輕松訪問每個國家/地區。
我正在考慮將這個數組減少到一個 object,每個國家都有三個鍵指向同一個國家 object。
像這樣:
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 訪問每個國家 object。
countriesObject["Poland"] // →
countriesObject["POL"] // → The same object
countriesObject["616"] // →
我的問題是,這會被認為是好的做法,還是有一些更好的方法可以達到相同或相似的結果?
謝謝!
沒關系,正如您正確指出的那樣,所有這些鍵都將指向相同的 object。我在這里看到的最大問題是使用這種方法很容易降低代碼的可讀性。 假設我們有這個片段:
console.log( countriesObject[id] );
問題是,這里的 id 是什么? 是國家全名嗎? 或者只是阿爾法? 或代碼? 你可能不在乎,真的,但如果你在乎,考慮給他們額外的結構:
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: {} });
另一個潛在的問題是你不能輕易地從這個 object 中刪除國家; 僅刪除一個指向它的鍵是不夠的,您必須輸入 go 並刪除所有三個鍵。 但這在這里似乎不是什么大事; 這看起來更像是一本字典。
你確實可以這樣寫:
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;
但是沒有固定的偏好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.