簡體   English   中英

如何在多級對象中查找鍵值對?

[英]How to find a key-value pair in multilevel Object?

我在Angular項目中使用了這種數據結構。 我不確定Angular是否確實重要,但是也許有好處:

const content = [
    {
        "id": 1, // language id
        "name": "english",
        "code": "en",
        "menus": [
            {
                "id": 1, // group id
                "lang_id": 1,
                "name": "Default",
                "items": [
                    {
                        "id": 2, // item id
                        "name": "About us",
                        "menu_id": 1,
                        "is_hidden": 0,
                        // ...
                    },
                ],
            },
            // ...
        ],
    },
    // ...
]

我也知道這些變量名稱的語言,組和項目的id

private lang_id = 1;
private group_id = 1;
private item_id = 2;

在數據結構中,我有許多帶有“組”的“語言”,而我在“組”中有很多的“項目”。

我嘗試使用此代碼,但我認為這里需要更好的選擇:

let indexLang: number;
let indexGroup: number;

for (let i = 0; i < this.content.length; i++) {
  if ( this.content[i].id === this.lang_id) {
    indexLang = i;
    break;
  }
}
for (let i = 0; i < this.content[indexLang].menus.length; i++) {
  if ( this.content[indexLang].menus[i].id === this.group_id) {
    indexGroup = i;
    break;
  }
}
// and another for loop to find the item...

有沒有更好的方法來找到資源最少的is_hidden鍵值對?

您正在尋找Array.prototype.find

 const content = [ { "id": 1, // language id "name": "english", "code": "en", "menus": [ { "id": 1, // group id "lang_id": 1, "name": "Default", "items": [ { "id": 2, // item id "name": "About us", "menu_id": 1, "is_hidden": 0, // ... }, ], }, // ... ], }, // ... ] let lang_id = 1; let group_id = 1; let item_id = 2; let language = content.find(item => item.id === lang_id); let group = language.menus.find(item => item.id === group_id); let item = group.items.find(item => item.id === item_id); console.dir(item) 

您肯定需要為其中一個ID不存在的情況添加一些錯誤處理。 您可以鏈接這些發現:

try {
  let item = content.find(item => item.id === lang_id)
               .menus.find(item => item.id === group_id)
               .items.find(item => item.id === item_id);
} catch( err ) {
   // one of the ids did not exists
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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