我在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
键值对?
答案 0 :(得分:1)
您正在寻找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
}