Javascript 循环对象和数组的对象
我有以下具有嵌套对象和数组的对象:Javascript 循环对象和数组的对象,javascript,Javascript,我有以下具有嵌套对象和数组的对象: { "children":[ { "id":"9737ea0a-fa6f-42e1-bf16-a10af80e4d50", "isCriteria":false, "name":"Domain 1", "children":[ { "id":"e06d1940-b480-48e2-8e1a-2fe2a3910dfd", "children":[
{
"children":[
{
"id":"9737ea0a-fa6f-42e1-bf16-a10af80e4d50",
"isCriteria":false,
"name":"Domain 1",
"children":[
{
"id":"e06d1940-b480-48e2-8e1a-2fe2a3910dfd",
"children":[
{
"id":"30995e1e-7195-4d01-85bf-c621398796cc",
"children":[
{
"id":"2969e48d-615e-4774-b92e-cbce768503ff",
"children":[
],
"isCriteria":true,
"name":"Criteria 1",
"questionType":"Yes/NO",
"importance":3
}
],
"isCriteria":false,
"name":"sub domain 1 - 2"
}
],
"isCriteria":false,
"name":"Sub domain 1"
},
{
"id":"c5b36f02-e765-4d93-970c-6faca94c28c1",
"children":[
{
"id":"6807ea4f-fb14-4d68-98f4-b3bf4c601e5c",
"children":[
],
"isCriteria":true,
"name":"Criteria 2",
"questionType":"5",
"importance":"1"
}
],
"isCriteria":false,
"name":"sub domain 2"
}
]
}
]
}
我想在孩子们中间绕一圈,直到我找到尾巴为止。然后用其他数据编辑尾部,例如。。在中无法工作,因为我有数组您可以在数组或对象上使用Object.keys,然后遍历这些。。这只是一个快速而肮脏的例子 风险值数据={ 儿童:[{ id:9737ea0a-fa6f-42e1-bf16-a10af80e4d50, isCriteria:错误, 域名:域名1, 儿童:[{ id:e06d1940-b480-48e2-8e1a-2fe2a3910dfd, 儿童:[{ 识别号:30995e1e-7195-4d01-85bf-c621398796cc, 儿童:[{ 识别号:2969e48d-615e-4774-b92e-cbce768503ff, 儿童:[], isCriteria:没错, 名称:标准1, 问题类型:是/否, 重要性:3 }], isCriteria:错误, 名称:子域1-2 }], isCriteria:错误, 名称:子域1 }, { id:c5b36f02-e765-4d93-970c-6faca94c28c1, 儿童:[{ id:6807ea4f-fb14-4d68-98f4-b3bf4c601e5c, 儿童:[], isCriteria:没错, 名称:标准2, 问题类型:5, 重要性:1 }], isCriteria:错误, 名称:子域2 } ] }] }; 函数loopStuffobj,cb{ Object.keysobj.forEachkey,idx=>{ var val=对象[键]; ifobject==val loopStuffval的类型,cb; else-cbval; }; } loopStuffdata,itm=>{ console.logitm;
}; 您可以轻松地递归地执行此操作 函数递归节点,级别=0{ 如果node==null返回;//检查null,退出 console.lognode.id==null?'root':node.id;//打印id 如果node.children node.children.forEachchild=>recursechild,级别+1;//移交给子级 } 下面代码的输出示例
root
↓ ID: 9737ea0a-fa6f-42e1-bf16-a10af80e4d50
↳ Name: Domain 1
↓ ID: e06d1940-b480-48e2-8e1a-2fe2a3910dfd
↳ Name: Sub domain 1
↓ ID: 30995e1e-7195-4d01-85bf-c621398796cc
↳ Name: sub domain 1 - 2
↳ ID: 2969e48d-615e-4774-b92e-cbce768503ff
↳ Name: Criteria 1
↳ Type: Yes/NO
↳ Importance: 3
↓ ID: c5b36f02-e765-4d93-970c-6faca94c28c1
↳ Name: sub domain 2
↳ ID: 6807ea4f-fb14-4d68-98f4-b3bf4c601e5c
↳ Name: Criteria 2
↳ Type: 5
↳ Importance: 1
常量数据=加载数据;
递归数据;
函数递归节点,级别=0{
如果node==null返回;
让符号=node.isCriteria?“↳' : '↓';
让paddingOuter=.padStartlevel-1*2';
让paddingner=.padStartlevel+1*2';
console.lognode.id==null?'root':paddingOuter+symbol+'id:'+node.id;
如果node.name console.logpaddingner+'↳ 名称:'+node.Name;
if node.isCriteria{
console.logpaddingner+'↳ 类型:'+node.questionType;
console.logpaddingner+'↳ 重要性:'+节点重要性;
}
如果node.children node.children.forEachchild=>recursechild,级别+1;
}
函数加载数据{
返回{
儿童:[{
id:9737ea0a-fa6f-42e1-bf16-a10af80e4d50,
isCriteria:错误,
域名:域名1,
儿童:[{
id:e06d1940-b480-48e2-8e1a-2fe2a3910dfd,
儿童:[{
识别号:30995e1e-7195-4d01-85bf-c621398796cc,
儿童:[{
识别号:2969e48d-615e-4774-b92e-cbce768503ff,
儿童:[
],
isCriteria:没错,
名称:标准1,
问题类型:是/否,
重要性:3
}],
isCriteria:错误,
名称:子域1-2
}],
isCriteria:错误,
名称:子域1
},
{
id:c5b36f02-e765-4d93-970c-6faca94c28c1,
儿童:[{
id:6807ea4f-fb14-4d68-98f4-b3bf4c601e5c,
儿童:[
],
isCriteria:没错,
名称:标准2,
问题类型:5,
重要性:1
}],
isCriteria:错误,
名称:子域2
}
]
}]
};
}
.as控制台包装{top:0;最大高度:100%!重要;}请参阅:为什么不?当与数组一起使用时,它将为您提供索引。如果要停止递归,您可以检查node.isCriteria是否为true。