繁体   English   中英

我怎样才能在 enabled = true 的父母和孩子中获得所有 GUID

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM