我在Java语言方面经验不足,所以我需要您的帮助。 我有这样表示的多维对象数组:
arr = {
"Ob1": {
"id": 1,
"name": "Ob1",
"properties": {
"attName": "A1",
"attType": "string",
"attOccurance": "minOccurs="1""
},
"Ob2": {
"id": 101,
"name": "Ob2",
"properties": {
"attName": "B1",
"attType": "string",
"attOccurance": "minOccurs="1""
},
"Ob3": {
"id": 10001,
"name": "Ob3",
"properties": {
"attName": "C1",
"attType": "string",
"attOccurance": "minOccurs="1""
},
},
"Ob4": {
"id": 10002,
"name": "Ob4",
"properties": {
"attName": "C2",
"attType": "string",
"attOccurance": "minOccurs="1""
},
},
},
"Ob5": {
"id": 102,
"name": "Ob5",
"properties": {
"attName": "B2",
"attType": "string",
"attOccurance": "minOccurs="1""
},
"Ob6": {
"id": 10003,
"name": "Ob6",
"properties": {
"attName": "C3",
"attType": "string",
"attOccurance": "minOccurs="1""
},
},
},
}
"Ob7": {
"id": 2,
"name": "Ob7",
"properties": {
"attName": "A2",
"attType": "string",
"attOccurance": "minOccurs="1""
},
},
}
在必须返回2个级别(例如在这种情况下使用“ Ob7”)的情况下,如何在该数组中递归循环并显示结果,同时跟踪父对象?
结果必须以xml模式显示(如果一个对象有子对象为complexType,否则为simpleType:
<xs:complexType name="A1" type="string" minOccurs="1">
<xs:complexType name="B1" type="string" minOccurs="1">
<xs:simpleType name="C1" type="string" minOccurs="1"/>
<xs:simpleType name="C2" type="string" minOccurs="1"/>
</complexType>
<xs:complexType name="B2" type="string" minOccurs="1">
<xs:simpleType name="C3" type="string" minOccurs="1"/>
</complexType>
</complexType>
<xs:simpleType name="A2" type="string" minOccurs="1"/>
此外,我不能将现有的库用于xml模式,必须在代码中完成映射。
我已经为递归尝试了类似的方法,但是它不起作用:
function looping(arr, key) {
if( typeof(arr[key]) == "object" && Object.keys(arr).length >= 1 ) {
val = arr[key];
for( k in value ) {
looping(arr[key], k);
}
} else {
var temp = arr[key];
}
}
for(key in arr) {
looping( arr, key);
}
答案 0 :(得分:1)
假设arr
是一个对象数组,看起来像这样:
let arr = [
{...},
{...}
]
您需要编写一个函数,该函数将遍历数组中的每个对象并调用一个递归函数,该函数将检查对象是复杂对象还是简单对象。
如果它是复杂的对象,则应递归地为该对象再次调用该函数,如果没有返回简单对象,则为该对象。
您无需编写其他代码即可获得2个级别或类似的内容,递归过程将自然而然地到达那里。
我不确定您想要的输出是包含有效xml的字符串还是实际的xml对象,因此这是jsfiddle,它从您的示例中获取对象数组,将其转换为字符串,然后转换为xml对象使用DOMParser(假设您想在浏览器中运行此代码):
https://jsfiddle.net/tara5/qk79Lcaz/
检出浏览器控制台以查看输出。
您可以修改功能以获得所需的效果。