JS前端二维数组生成树形结构示例详解

作为本文作者,我将为大家详细讲解“JS前端二维数组生成树形结构示例详解”的攻略,让读者能够更加深入地了解并掌握二维数组生成树形结构的方法。

标题

1. 介绍

在前端开发中,我们经常需要将一组数据进行树形结构的展示,这时候我们就需要通过一些方法来实现树形结构的生成。本文就将为大家介绍一种使用二维数组生成树形结构的方法。

2. 实现步骤

2.1 数组格式

首先,我们需要准备一个二维数组用来存储树形数据,通常情况下,每个二维数组中的元素都是一个对象,对象中包含了当前节点的id、父节点的id以及节点的名称等信息。

let treeData = [
    { id: 1, parentId: 0, title: '根节点1' },
    { id: 2, parentId: 1, title: '子节点1-1' },
    { id: 3, parentId: 1, title: '子节点1-2' },
    { id: 4, parentId: 2, title: '子节点1-1-1' },
    { id: 5, parentId: 2, title: '子节点1-1-2' },
    { id: 6, parentId: 3, title: '子节点1-2-1' },
    { id: 7, parentId: 3, title: '子节点1-2-2' }
]

2.2 生成树形结构

接下来,我们需要编写一个函数,用来将树形数据转化为树形结构。

function generateTreeData(treeData, parentId) {
    let tree = []
    for (let i = 0; i < treeData.length; i++) {
        let node = treeData[i]
        if (node.parentId === parentId) {
            let children = generateTreeData(treeData, node.id)
            if (children.length > 0) {
                node.children = children
            }
            tree.push(node)
        }
    }
    return tree
}

在函数中,我们首先定义了一个tree数组,用来存储树形结构的数据。然后遍历二维数组,找到所有parentId等于当前节点id的元素,对每个元素递归调用generateTreeData函数,并将返回的数组作为当前节点的子节点,将节点插入到tree数组中。最后返回tree数组即可。

示例说明

示例一

假设我们有如下二维数组:

let treeData = [
    { id: 1, parentId: 0, title: '根节点1' },
    { id: 2, parentId: 1, title: '子节点1-1' },
    { id: 3, parentId: 1, title: '子节点1-2' },
    { id: 4, parentId: 2, title: '子节点1-1-1' },
    { id: 5, parentId: 2, title: '子节点1-1-2' },
    { id: 6, parentId: 3, title: '子节点1-2-1' },
    { id: 7, parentId: 3, title: '子节点1-2-2' }
]

将其传递给generateTreeData函数,则可以生成如下树形结构:

[{
  id: 1,
  parentId: 0,
  title: '根节点1',
  children: [{
    id: 2,
    parentId: 1,
    title: '子节点1-1',
    children: [{
      id: 4,
      parentId: 2,
      title: '子节点1-1-1'
    }, {
      id: 5,
      parentId: 2,
      title: '子节点1-1-2'
    }]
  }, {
    id: 3,
    parentId: 1,
    title: '子节点1-2',
    children: [{
      id: 6,
      parentId: 3,
      title: '子节点1-2-1'
    }, {
      id: 7,
      parentId: 3,
      title: '子节点1-2-2'
    }]
  }]
}]

示例二

假设我们有如下二维数组:

let treeData2 = [
    { id: 1, parentId: 0, title: '根节点1' },
    { id: 2, parentId: 1, title: '子节点1-1' },
    { id: 3, parentId: 2, title: '子节点1-1-1' },
    { id: 4, parentId: 0, title: '根节点2' },
    { id: 5, parentId: 4, title: '子节点2-1' }
]

将其传递给generateTreeData函数,则可以生成如下树形结构:

[
  {
    id: 1,
    parentId: 0,
    title: '根节点1',
    children: [
      {
        id: 2,
        parentId: 1,
        title: '子节点1-1',
        children: [
          {
            id: 3,
            parentId: 2,
            title: '子节点1-1-1'
          }
        ]
      }
    ]
  },
  {
    id: 4,
    parentId: 0,
    title: '根节点2',
    children: [
      {
        id: 5,
        parentId: 4,
        title: '子节点2-1'
      }
    ]
  }
]

以上就是整个过程的详细说明,使用二维数组生成树形结构非常方便,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS前端二维数组生成树形结构示例详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 详解Node.js中间件是怎样工作的

    首先我们来介绍一下Node.js中间件是什么。在Node.js中,中间件(Middleware)是指介于客户端与服务器端之间的软件,负责处理和转发客户端与服务器端之间的请求和响应,常用于处理HTTP请求。 Node.js中的中间件机制是基于函数调用链实现的。每个中间件函数接受三个参数:req、res和next。req表示HTTP请求对象,res表示HTTP响…

    node js 2023年6月8日
    00
  • Node.js常用三大模块之path模块

    Node.js中的path模块是一个用于处理文件路径的基础模块,常被用来读取、解析、合并、规范化文件路径等操作。本文将针对path模块的用法进行详细讲解,包括文件路径的表示方式、常用的方法以及示例说明。 文件路径的表示方式 在Node.js中,文件路径可以用以下几种方式进行表示: 相对路径:相对于当前文件所在的目录或工作目录。例如”./test.js”表示当…

    node js 2023年6月8日
    00
  • node静态服务器实现静态读取文件或文件夹

    Node静态服务器可以用于实现静态读取文件或文件夹的功能,具体操作流程如下: 第一步:安装node-static模块 在终端上执行以下命令安装模块: npm install node-static –save 安装完成后,在项目中引用node-static模块: var static = require(‘node-static’); 第二步:创建node…

    node js 2023年6月8日
    00
  • Nodejs Sequelize手册学习快速入门到应用

    Node.js 是一种流行的服务器端 JavaScript 运行环境,而 Sequelize 是一款基于 Node.js 的ORM 库,其可以支持多种数据库,如MySQL、PostgreSQL、SQLite 和 Microsoft SQL Server。Sequelize具有易学易用的特点,从 Sequelize的官方文档开始入手,可以快速学习和开发 Seq…

    node js 2023年6月8日
    00
  • JavaScript随机打乱数组顺序之随机洗牌算法

    关于“JavaScript随机打乱数组顺序之随机洗牌算法”,我可以为您提供以下攻略: 什么是随机洗牌算法 “随机洗牌算法”是一种能够使数组顺序随机打乱的算法。其原理是基于数学中的随机排列理论,将数组中的元素随机地交换位置,从而打乱其原始顺序。 随机洗牌算法的实现过程 下面是一段JavaScript代码,用来实现“随机洗牌算法”: function shuff…

    node js 2023年6月8日
    00
  • NodeJS学习笔记之Module的简介

    下面是我对于“NodeJS学习笔记之Module的简介”的攻略说明: 什么是Module 在NodeJS中,Module(模块)是一个独立的文件作用域,可以包含代码、函数、变量等内容。Module 具备了封装性、重用性和依赖性,让我们能够更好地组织有意义的代码。 模块的导入和导出 要使用一个模块内容,我们需要先了解如何导入它。在 NodeJS 中,采用 re…

    node js 2023年6月8日
    00
  • 详解NodeJs支付宝移动支付签名及验签

    下面是详解NodeJs支付宝移动支付签名及验签的完整攻略: 1. NodeJs中使用支付宝移动支付签名及验签 1.1. 签名 在支付宝移动支付中,签名是用于防止数据篡改的重要手段。在NodeJs中,使用以下代码可生成签名: const crypto = require(‘crypto’); function getSign(params, privateKe…

    node js 2023年6月8日
    00
  • node.js中的fs.openSync方法使用说明

    node.js中的fs.openSync方法使用说明 fs.openSync() 方法用于使用文件路径字符串之前,获取对文件的访问。该方法通过一个文件路径字符串,与一组选项对象进行调用,返回一个整数(文件描述符),代表了一个通过该文件描述符可以进行操作的文件。 方法语法 fs.openSync(path[, flags[, mode]]) 方法参数 path…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部