javascript - 如何从 json 字符串中递归获取父 ID

标签 javascript json angular

{
  "id": "1",
  "name": "root",
  "children": [
    {
      "id": "1.1",
      "name": "Child 1",
      "children": [
        {
          "id": "1.1.1",
          "name": "Child 1-1",
          "children": [
            {
              "id": "1-1-1",
              "name": "Child 1-1-1",
              "children": [

              ]
            }
          ]
        },
        {
          "id": "1.1.2",
          "name": "Child 1-2",
          "children": [

          ]
        },
        {
          "id": "1.1.3",
          "name": "Child 1-3",
          "children": [

          ]
        }
      ]
    },
    {
      "id": "1.2",
      "name": "Child 2",
      "children": [
        {
          "id": "1.2.1",
          "name": "Child 2-2",
          "children": [

          ]
        }
      ]
    }
  ]
}

这是作为响应的 JSON 字符串。必须递归地获取父元素的所有父元素 id。

例如,输入是1.2.1,则返回[1.2] 输入是 1.1.3 然后返回 [1.1, 1]

我怎样才能实现这个目标?

最佳答案

只是使用 dfs 的简单递归

const data = JSON.parse('{"id":"1","name":"root","children":[{"id":"1.1","name":"Child 1","children":[{"id":"1.1.1","name":"Child 1-1","children":[{"id":"1-1-1","name":"Child 1-1-1","children":[]}]},{"id":"1.1.2","name":"Child 1-2","children":[]},{"id":"1.1.3","name":"Child 1-3","children":[]}]},{"id":"1.2","name":"Child 2","children":[{"id":"1.2.1","name":"Child 2-2","children":[]}]}]}')

function dfs (target, node) {
  if (node.id === target) { return node.id }
  if (!node.children) { return false } // we could even skip that line since in your data you seem to have an empty array
  const has = node.children.find(c => dfs(target, c))
  return has && [node.id].concat(has.id)
}
console.log(dfs('1.2.1', data))
console.log(dfs('1.1.3', data))

关于javascript - 如何从 json 字符串中递归获取父 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60295173/

相关文章:

javascript - 无法在 JQuery 中正确解析 JSON 数据

node.js - 如何在使用 swagger-ui-express 和 swagger-jsdoc 时正确使用 swagger 文件中的 $ref

javascript - 不使用按钮加载代码

javascript - 如何在 angularjs 中的 ng-change 上分配第二个参数值?

javascript - PHP如何echo Js自定义alert

javascript - 如何从 JSON 对象中获取字符串

Angular 如何保护其中有一个 id 并且任何人都可以猜到的路由?

javascript - 在其他函数中访问时,响应订阅中设置的 Angular 4 值为空

angular - 是否可以将自定义 onChange 函数添加到 Angular2 中的默认 FormControl?

javascript - 如何导出 Blender 模型以在 THREE.js 中显示颜色