广告
返回顶部
首页 > 资讯 > 精选 >JavaScript实现树结构转换的方法有哪些
  • 392
分享到

JavaScript实现树结构转换的方法有哪些

2023-07-05 12:07:51 392人浏览 安东尼
摘要

本文小编为大家详细介绍“javascript实现树结构转换的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript实现树结构转换的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在

本文小编为大家详细介绍“javascript实现树结构转换的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript实现树结构转换的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

在 JavaScript 编程中,将数组转换为树结构是一个常见的需求。本篇博客将介绍五种常用的方法来实现数组转树结构,并讨论每种方法的时间复杂度、空间复杂度和最优解。

假设有一个由对象组成的数组,每个对象包含 idparentId 两个属性。其中 id 表示节点的唯一标识,parentId 表示该节点的父节点的 id

const nodes = [  { id: 1, parentId: null },  { id: 2, parentId: 1 },  { id: 3, parentId: 1 },  { id: 4, parentId: 2 },  { id: 5, parentId: 3 },  { id: 6, parentId: 3 },  { id: 7, parentId: 4 },  { id: 8, parentId: 4 },];

以上面的数组为例,我们将介绍以下五种方法来将其转换为树结构。

方法一:使用递归

function arrayToTreeRec(nodes, parentId = null) {  return nodes    .filter((node) => node.parentId === parentId)    .map((node) => ({ ...node, children: arrayToTreeRec(nodes, node.id) }));}const tree = arrayToTreeRec(nodes, null);

时间复杂度:O(n^2),其中 n 是节点的数量。 空间复杂度:O(n^2)。 优缺点:不适合大规模数据。

方法二:使用循环

function arrayToTreeLoop(nodes) {  const map = {};  const tree = [];  for (const node of nodes) {    map[node.id] = { ...node, children: [] };  }  for (const node of Object.values(map)) {    if (node.parentId === null) {      tree.push(node);    } else {      map[node.parentId].children.push(node);    }  }  return tree;}const tree = arrayToTreeLoop(nodes);

时间复杂度:O(n),其中 n 是节点的数量。 空间复杂度:O(n)。 优缺点:适合大规模数据。

方法三:使用 reduce

function arrayToTreeReduce(nodes) {  const map = {};  const tree = nodes.reduce((acc, node) => {    map[node.id] = { ...node, children: [] };    if (node.parentId === null) {      acc.push(map[node.id]);    } else {      map[node.parentId].children.push(map[node.id]);    }    return acc;  }, []);  return tree;}const tree = arrayToTreeReduce(nodes);

时间复杂度:O(n),其中 n 是节点的数量。 空间复杂度:O(n)。 优缺点:代码简洁,适合中小规模数据。

方法四:使用哈希表

function arrayToTreeMap(nodes) {  const map = new Map(nodes.map((node) => [node.id, { ...node, children: [] }]));  const tree = [];  for (const node of map.values()) {    if (node.parentId === null) {      tree.push(node);    } else {      map.get(node.parentId).children.push(node);    }  }  return tree;}const tree = arrayToTreeMap(nodes);

时间复杂度:O(n),其中 n 是节点的数量。 空间复杂度:O(n)。 优缺点:适合大规模数据,而且由于使用了 Map,相比于方法二和方法三,能够更方便地进行节点的查找和删除。

方法五:使用深度优先搜索

function arrayToTreeDFS(nodes) {  const map = new Map(nodes.map((node) => [node.id, { ...node, children: [] }]));  const tree = [];  for (const node of map.values()) {    if (node.parentId === null) {      dfs(node, tree);    }  }  function dfs(node, parent) {    if (parent) {      parent.children.push(node);    }    for (const child of node.children) {      dfs(map.get(child.id), node);    }  }  return tree;}const tree = arrayToTreeDFS(nodes);

时间复杂度:O(n),其中 n 是节点的数量。 空间复杂度:O(n)。 优缺点:相比于方法二、方法三和方法四,可以更方便地进行深度优先搜索。

读到这里,这篇“JavaScript实现树结构转换的方法有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: JavaScript实现树结构转换的方法有哪些

本文链接: https://www.lsjlt.com/news/351692.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript实现树结构转换的方法有哪些
    本文小编为大家详细介绍“JavaScript实现树结构转换的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript实现树结构转换的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在...
    99+
    2023-07-05
  • JavaScript实现树结构转换的五种方法总结
    目录方法一:使用递归方法二:使用循环方法三:使用 reduce方法四:使用哈希表方法五:使用深度优先搜索总结在 JavaScript 编程中,将数组转换为树结构是一个常见的需求。本篇...
    99+
    2023-03-15
    JavaScript树结构转换 JavaScript树结构
  • Java递归实现树形结构的方式有哪些
    这篇文章主要介绍“Java递归实现树形结构的方式有哪些”,在日常操作中,相信很多人在Java递归实现树形结构的方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java递归实现树形结构的方式有哪些”的疑...
    99+
    2023-07-04
  • javascript数值转换的方法有哪些
    今天小编给大家分享一下javascript数值转换的方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。JavaScri...
    99+
    2023-07-06
  • JavaScript类型转换的方法有哪些
    今天小编给大家分享一下JavaScript类型转换的方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2022-10-19
  • TypeScript实现字符串转树结构的方法详解
    目录前言思路分析实现代码示例代码前言 有一个多行字符串,每行开头会用空格来表示它的层级关系,每间隔一层它的空格总数为2,如何将它转为json格式的树型数据?本文就跟大家分享下这个算法...
    99+
    2022-11-13
  • javascript有哪些转换成整数方法
    这篇文章主要讲解了“javascript有哪些转换成整数方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript有哪些转换成整数方法”吧! ...
    99+
    2022-10-19
  • JavaScript平铺数组转树形结构的实现示例
    目录后台丢来了1w条数据 递归方式非递归方式总结后台丢来了1w条数据 千算万算,还是没有逃过,后台真的就上万条数据一次丢给前端了。好吧,好在还不是10w条。如下,后台返回的是这样的...
    99+
    2022-11-12
  • JavaScript强制类型转换方法有哪些
    这篇文章主要介绍“JavaScript强制类型转换方法有哪些”,在日常操作中,相信很多人在JavaScript强制类型转换方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-19
  • JavaScript数组扁平转树形结构数据(Tree)的实现
    前言 之前面试有遇到过这个问题,面试官问:如何把一个数组数据扁平,然后转化为Tree结构数据,工作中刚好也用到了,在这里总结一下。 需求大致如下 把这个数组转为树形结构数据(Tree...
    99+
    2022-11-13
    JavaScript数组扁平转树形结构 javascript扁平数组转树形结构
  • javascript中有哪些参数类型转换的方法
    javascript中有哪些参数类型转换的方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点击,给用户提供...
    99+
    2023-06-14
  • JavaScript字符串转换数字的方法有哪些
    这篇文章主要介绍“JavaScript字符串转换数字的方法有哪些”,在日常操作中,相信很多人在JavaScript字符串转换数字的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2022-10-19
  • JavaScript实现经纬度转换常用方法总结
    简单介绍一下几种常见的坐标系: WGS84坐标系:即地球坐标系(World Geodetic System),国际上通用的坐标系。设备包含的GPS芯片或者北斗芯片获取的经纬度一般都是...
    99+
    2023-02-09
    JavaScript经纬度转换方法 JavaScript经纬度转换 JavaScript经纬度
  • javascript的结束方法有哪些
    这篇文章主要介绍“javascript的结束方法有哪些”,在日常操作中,相信很多人在javascript的结束方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java...
    99+
    2022-10-19
  • Python实现列表转换成字典数据结构的方法
    本文实例讲述了Python实现列表转换成字典数据结构的方法。分享给大家供大家参考,具体如下: ''' [ {'symbol': 101, 'sort': 1, 'name': 'aaaa'}, ...
    99+
    2022-06-04
    数据结构 转换成 字典
  • VB.NET转换形态的方法有哪些
    这篇文章将为大家详细讲解有关VB.NET转换形态的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。VB.NET经过长时间的发展,很多用户都很了解VB.NET转换型态了,这里我发表一下个人理解,和大...
    99+
    2023-06-17
  • C#的类型转换方法有哪些
    这篇“C#的类型转换方法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#的类型转换方法有哪些”文章吧。C# 类型转换...
    99+
    2023-06-17
  • golang类型转换的方法有哪些
    在Golang中,类型转换的方法有以下几种: 默认类型转换:可以通过将一个类型直接赋值给另一个类型来进行类型转换。例如:var ...
    99+
    2023-10-22
    golang
  • JavaScript交换值的方法有哪些
    JavaScript交换值的方法有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。早期之前,在 JS 中交换值,我们主要还是使用临时变量。E...
    99+
    2022-10-19
  • APK结构优化的方法有哪些
    这篇文章主要介绍“APK结构优化的方法有哪些”,在日常操作中,相信很多人在APK结构优化的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”APK结构优化的方法有哪些”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作