簡體   English   中英

創建指向同一個 object 的多個密鑰是否有效?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM