当您不知道该对象有多少个视图(“ A”,“ B”,“ C” ...)时,是否可以遍历此嵌套对象?我目前使用字母索引,但是现在我听说“视图层”也可以使用不同的名称,因此我无法使用当前的想法,我必须遍历该对象而无需知道“ A”,“ B”的名称, “ C”层。有办法吗?
我当前的代码
loopThroughObject()
{
let alphabet = ["A", "B", "C"];
let index = 0;
this.all_tables.views.forEach(views => {
views[alphabet[index]].forEach(view => {
view.positionen.forEach(position=> {
alert( position.field1);
});
});
index++;
});
}
嵌套的JSON对象
all_tables = {
"views":[
{
"A":[
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
},
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
}
],
"B":[
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
},
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
}
],
"C":[
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
},
{
"id":"",
"username":"",
"status":"",
"location":"",
"positionen":[
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
},
{
"field1":"",
"field2":"",
"field3":""
}
]
}
]
}
]
}
答案 0 :(得分:1)
对此有几种Object
方法:Object.keys
(自ES5起),Object.values
(自ES2017起),Object.entries
(仍在试验中)。对于最通用的方法,您可以使用第一种方法:
function loopThroughObject() {
this.all_tables.views.forEach(views => {
Object.keys(views).forEach(key => {
let view = views[key];
view.positionen.forEach(position => {
alert(position.field1);
});
});
});
}
答案 1 :(得分:1)
我认为您的JSON结构并不完全正确。
首先,views
属性是array
,但其中有1个项目,唯一的项目是具有视图项目的object
。我认为它首先应该是object
,因为JavaScript没有任何关联数组类型。
"views": {
"A":[ .. ],
"B":[ .. ],
...
}
然后,您可以使用Object
,Object.keys()
或Object.values()
等Object.entries()
方法进行迭代。
Object.values(this.all_tables.views).forEach(viewGroup => {
viewGroup.forEach(view => {
view.positionen.forEach(position=> {
alert( position.field1);
});
});
});
进一步阅读:
答案 2 :(得分:0)
您可以使用以下代码
function loopThroughObject()
{
let index = 0;
this.all_tables.views.forEach(views => {
for (var key in views) {
views[key].forEach(view => {
view.positionen.forEach(position=> {
alert( position.field1);
});
});
}
index++;
});
}