找出链条中其对应的所有的父级 name

发布于 2023-05-04 20:17:31 字数 2038 浏览 41 评论 0

已知数据格式,实现一个函数 fn ,给一个 id 找出链条中其对应的所有的父级 name,使用 JS 分别用 DFS 和 BFS

数据格式

const data = [
  {
    id: 1,
    name: '中国',
    children: [
      {
        id: 11,
        name: '北京',
        children: [
          {
            id: 111,
            name: '朝阳区',
          },
          {
            id: 112,
            name: '海淀区',
          },
        ],
      },
      {
        id: 12,
        name: '上海',
        children: [
          {
            id: 121,
            name: '浦东新区',
          },
          {
            id: 122,
            name: '徐汇区',
          },
        ],
      },
    ],
  },
  {
    id: 2,
    name: '美国',
    children: [
      {
        id: 21,
        name: '纽约',
        children: [
          {
            id: 211,
            name: '曼哈顿区',
          },
          {
            id: 212,
            name: '布鲁克林区',
          },
        ],
      },
      {
        id: 22,
        name: '洛杉矶',
        children: [
          {
            id: 221,
            name: '好莱坞区',
          },
          {
            id: 222,
            name: '比佛利山庄区',
          },
        ],
      },
    ],
  },
];

DFS

// 使用 DFS 实现
function findParentsDFS(id, data) {
  let result = [];
  function dfs(node, path) {
    if (node.id === id) {
      result = path;
      return;
    }
    if (node.children) {
      for (let i = 0; i < node.children.length; i++) {
        dfs(node.children[i], [...path, node.name]);
      }
    }
  }
  dfs({ children: data }, []);
  return result.slice(1);
}

BFS

// 使用 BFS 实现
function findParentsBFS(id, data) {
  let result = [];
  let queue = [{ node: { children: data }, path: [] }];
  while (queue.length > 0) {
    const { node, path } = queue.shift();
    if (node.id === id) {
      result = path;
      break;
    }
    if (node.children) {
      for (let i = 0; i < node.children.length; i++) {
        queue.push({ node: node.children[i], path: [...path, node.name] });
      }
    }
  }
  return result.slice(1);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

那伤。

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

qq_eQNo9e

文章 0 评论 0

内心旳酸楚

文章 0 评论 0

mb_BlPo2I8v

文章 0 评论 0

alipaysp_ZRaVhH1Dn

文章 0 评论 0

alipaysp_VP2a8Q4rgx

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文