Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
188 views
in Technique[技术] by (71.8m points)

js递归算法

如下数据结构

{
  
"physicalmachineAddTypes": {
      "scriptAdd": {
        "label": "托管",
        "desc": "托管:用于托管已有操作系统的服务器,托管后将同时生成物理机和裸金属记录"
      },
      "preAdd": {
        "label": "预注册",
        "desc": "预注册:用于预上架未配置 BMC 信息的服务器,通过预注册功能配置服务器基本信息,待服务器上电后, MAC 信息匹配即可进行注册并配置 BMC 信息等"
      },
      "isoAdd": {
        "label": "ISO引导注册",
        "desc": "ISO引导注册:用于立即注册已配置 BMC 信息的服务器,该功能不要求服务器处于 DHCP relay 网络环境,但是要求服务器支持 Redfish 功能"
      },
      "pxeAdd": {
        "label": "PXE引导注册",
        "desc": "PXE引导注册:用于立即注册已配置 BMC 信息的服务器,要求服务器处于 DHCP relay 网络环境"
      }
    },
    "http_proxy": "Http代理",
     "https_proxy": "Https代理"

}
```~~~~

想求结果

{
    "托管": "physicalmachineAddTypes.scriptAdd.label",
     "托管:用于托管已有操作系统的服务器,托管后将同时生成物理机和裸金属记录": "physicalmachineAddTypes.scriptAdd.desc",
     
     ....
     "Http代理": "http_proxy",
     "https_proxy": "Https代理"
}

如何递归拿到这样的 value: keys呢???


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
let res = {}
function dfs (obj, path) {
  for (const key in obj) {
    let item = obj[key]
    let prefix = path && '.' || ''
    let newpath = `${path}${prefix}${key}`
    if (typeof item === 'string') {
      res[item] = newpath
    } else {
      dfs(item, newpath)
    }
  }
}
dfs({}, '')

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...