![](/img/trans.png)
[英]How can I get an array of the parents and all of the children of each node of a tree?
[英]How can i get all GUID's in parents and children where enabled = true
我需要在我的 json 文档中获取所有节点 (guid) 的列表,其中 enabled 键设置为 true。 读取所有父节点以及可能的子节点的最佳和最有效的方法是什么。 在我的例子中,孩子们总是在 items 键下,孩子们也可以有自己的孩子。 我想出了一些基本脚本,可以深入检查 2 个级别,但我希望有一种更好的方法可以使它更加灵活,我不必对每个级别进行硬编码。
const enabledguid = []
function getenabled() {
mydata.jsondoc.forEach(i => {
if (i.enabled === true) {
enabledguid.push(i.guid)
}
// Check if Parent has children
if (i.items && i.items.length > 0){
console.log('we have children ' + i.items.length)
i.items.forEach(i => {
if (i.enabled === true) {
enabledguid.push(i.guid)
}
if (i.items && i.items.length > 0){
console.log('Child has children ' + i.items.length)
i.items.forEach(i => {
if (i.enabled === true) {
enabledguid.push(i.guid)
}
})
}
})
}
})
console.log(enabledguid)
}
getenabled()
这是 json 文件的示例
[
{
"enabled": true,
"guid": "F56AAC06-D2EB-4E1C-B84D-25F72973312E",
"name": "Farms",
"items": [
{
"enabled": true,
"guid": "144C0989-9938-4AEC-8487-094C23A5F150",
"name": "New Farm List"
},
{
"enabled": false,
"guid": "8FBA7B0B-566E-47CD-885B-1C08B57F34F6",
"name": "Farm Lists"
},
{
"enabled": true,
"guid": "FCD36DBD-0639-4856-A609-549BB10BEC1A",
"name": "Farm Upload"
},
{
"enabled": false,
"guid": "4264DA98-1295-4A65-97C6-313485744B4D",
"name": "Campaign",
"items": [
{
"enabled": false,
"guid": "9CBDC6BB-5B3D-4F53-B846-AFE55F34C1E9",
"name": "New Campaign"
},
{
"enabled": true,
"guid": "281490B5-C67D-4238-9D52-DE1DFA373418",
"name": "Campaign List"
}
]
}
]
},
{
"enabled": true,
"guid": "1A9127A3-7AC7-4E07-AFA0-B8F8571B1B14",
"name": "Vendor",
"items": [
{
"enabled": true,
"guid": "6E6B4DA9-D99D-42D8-A4FE-7C7A82B9F1BE",
"name": "Vendor List"
},
{
"enabled": false,
"guid": "63A61762-75FB-466A-8859-25E184C3E016",
"name": "Add Vendor"
}
]
}
]
这是学习递归函数的一个很好的练习,查一下。
在这个问题中,基本情况是当您到达一个没有项目子集的项目时。
const enabledguid = []
function getenabled(items) {
items.forEach(item => {
if (item.enabled === true) {
enabledguid.push(item.guid)
}
if (item.items) {
getenabled(item.items)
}
})
}
getenabled(jsondoc)
console.log(jsondoc)
基于我在递归上的发现,我想出了这个也做同样工作的。
mydata.filter( item => {
iratedObject(item)
})
function iratedObject(obj) {
for (prop in obj){
if(typeof(obj[prop]) =="object"){
iratedObject(obj[prop]);
} else {
if(obj['enabled'] === true && prop === 'guid'){
enabledguid.push(obj['guid'])
}
}}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.