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