js递归遍历树形结构数据,获取所有数组id集合

这篇具有很好参考价值的文章主要介绍了js递归遍历树形结构数据,获取所有数组id集合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现思路

可以使用递归遍历整个树形数组,将每个节点的id加入到一个数组中,最后返回这个数组即可。

数据准备

let datas = [
  {
    id: "1",
    pId: "0",
    children: [
      {
        id: "1-1",
        pId: "1",
      },
    ],
  },
  {
    id: "2",
    pId: "0",
    children: [
      {
        id: "2-1",
        pId: "1",
        children: [
          {
            id: "2-1-2",
            pId: "2",
          },
        ],
      },
    ],
  },
];

代码实现

方式一

function getAllIds(tree, result) {
  //遍历树  获取id数组
  for (const i in tree) {
    result.push(tree[i].id); // 遍历项目满足条件后的操作
    if (tree[i].children) {
      //存在子节点就递归
      getAllIds(tree[i].children, result);
    }
  }
  return result;
}

获取结果

console.log(getAllIds(datas, []), "getAllIds+++++++++");

方式二

function getAllIds(tree) {
  let result = [];
  if (!Array.isArray(tree)) {
    return result;
  }
  tree.forEach((node) => {
    result.push(node.id);
    if (Array.isArray(node.children)) {
      // result.push(...getAllIds(node.children));
      result = result.concat(getAllIds(node.children));
    }
  });
  return result;
}

获取结果

console.log(getAllIds(datas), "getAllIds+++++++++");

方式三

function getAllIds(tree, result) {
  if (!Array.isArray(tree)) return []; // 如果不是一个数组,则返回
  for (let i = 0; i < tree.length; i++) {
    const node = tree[i];
    result.push(node.id); // 存储当前节点的id
    if (Array.isArray(node.children)) {
      // 如果当前节点有子节点,则递归遍历子节点
      getAllIds(node.children, result);
    }
  }
  return result;
}

获取结果

console.log(getAllIds(datas, []), "getAllIds+++++++++");

方法总结

这里的tree是树形数组,result是用来保存所有id的数组。

首先遍历当前层级的每个节点,将节点的id加入到result中。

如果节点还有子节点,就递归调用getAllIds函数获取子节点的id并将其合并到result数组中。

最后返回result数组。文章来源地址https://www.toymoban.com/news/detail-511611.html

到了这里,关于js递归遍历树形结构数据,获取所有数组id集合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】树形结构所有路径复原为链表

    目录 1. 树形结构可视化 2. 树形结构转为链表 此目标是要还原树形结构的所有路径。树形结构是一种常见的数据结构,它表示元素之间层次关系。在树形结构中,每个节点可能拥有一个或多个子节点,形成了一个分层的结构。为了还原树形结构的路径,我们需要找到从根节点

    2024年02月06日
    浏览(34)
  • js中遍历对象数组并获取对象相应的属性值

    JavaScript中遍历对象数组的方法有很多种。以下是常见的四种常见的方法: for ​循环, for...of ​循环, forEach ​方法和 map ​方法,在遍历的同时,通过访问对象的属性来获取相应的值。 ​ for ​循环: ​ for...of ​循环: ​ forEach ​方法: ​ map ​方法(通常用于创建一个

    2023年04月25日
    浏览(36)
  • 【数据结构】二叉树(遍历,递归)

     🌈个人主页: 秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 🔥 系列专栏: 《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm=1001.2014.3001.5482 ​​​ 目录 二叉树遍历规则 前序遍历 ​ 中序遍历  后序遍历 递归结构遍历 前序 中序  求节点个数 求叶子节点个数  求树

    2024年01月19日
    浏览(40)
  • 【数据结构|二叉树遍历】递归与非递归实现前序遍历、中序遍历、后序遍历

    递归与非递归实现二叉树的前序遍历、中序遍历、后序遍历。 二叉树图 定义 前序遍历(Preorder Traversal): 前序遍历的顺序是先访问根节点,然后按照先左后右的顺序访问子节点。对于上面的二叉树,前序遍历的结果是:4 - 2 - 1 - 3 - 6 - 5 - 7。 中序遍历(Inorder Traversal): 中

    2024年02月14日
    浏览(43)
  • Java获取树形结构数据

    目录 前言: 开发前准备: 数据库: 实体类: VO对象: 代码实现: Controller层: Service层: 运行结果: 第二种 在日常的开发或者工作需求中,我们会用到树形结构数据。树形结构是一个比较常用的数据类型,一般多用于查询包含父子类关系的数据。我们常常通过父级id和层

    2024年02月12日
    浏览(37)
  • 【算法】递归解决各种数据结构的遍历问题

    对于递归算法,我们最先想到的应该就是用递归的方式去中序遍历一棵树,递归的使用使得我们可以先深入到下层中,然后慢慢的输出下层的元素之后输出上层元素。 因此,基于此,我们甚至可以使用递归来逆序输出一个栈,链表等数据结构。 使用递归输出树 使用递归逆序

    2024年02月08日
    浏览(65)
  • 【数据结构】二叉树的遍历递归算法详解

    我们来写一个函数 BuyNode(x)函数 用于创建二叉树结点。 用动态开辟函数 malloc 函数进行动态开辟,并强制转换为 BTNode 型,用变量 node 来去管理开辟的空间。 我们初始化结点,其 val 即为传入的参数x,左右指针 left 和 right 都设为NULL。 我们在主函数中创建上面这样一颗二叉树

    2024年01月20日
    浏览(43)
  • 探索树形数据结构,通识树、森林与二叉树的基础知识(专有名词),进一步利用顺序表和链表表示、遍历和线索树形结构

      结点之间有分支,具有层次关系 树的定义 : 树 (tree)是n(n≥0)个有限集。 若n = 0,则称为空树; 若n 0,则它满足如下两个条件: 有且仅有一个特定的称为根(Root)的结点; 其余结点可分为m(m≥0)个互不相交的有限集T1,T2,T3,.....,Tm,其中每一个集合本身又是一棵树,并称为根的

    2024年02月01日
    浏览(47)
  • Java 数据结构篇-二叉树的深度优先遍历(实现:递归方式、非递归方式)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍    文章目录         1.0 二叉树的说明         1.1 二叉树的实现         2.0 二叉树的优先遍历说明         3.0 用递归方式实现二叉树遍历         3.1 用递归方式实现遍历 - 前序遍历         3.2 用递归

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包