前端纯数组转树形结构

news2024/9/21 4:37:51

问题描述

前端需要处理后端返回的数据,展示如下。
在这里插入图片描述

解决方式

因为使用ProTable组件,那么数据只要携带children字段,就可以如上图展示。

方式一:后端返回数据的时候,直接封装好,如下:

const testMenuList = [
  {
    "id": 100100,
    "parentId": 0,
    "icon": "setting",
    "name": "系统管理",
    "path": "",
    "uri": "",
    "sort": 0,
    "hidden": 1,
    "type": 0,
    "children": [
		{
		    "id": 100101,
		    "parentId": 100100,
		    "icon": "",
		    "name": "app版本管理",
		    "path": "",
		    "uri": "",
		    "sort": 0,
		    "hidden": 1,
		    "type": 1,
		},
		{
			"id": 100102,
		    "parentId": 100100,
		    "icon": "",
		    "name": "部门管理",
		    "path": "",
		    "uri": "",
		    "sort": 1,
		    "hidden": 1,
		    "type": 1,
		},
		{
		    "id": 100103,
		    "parentId": 100100,
		    "icon": "",
		    "name": "角色管理",
		    "path": "",
		    "uri": "",
		    "sort": 2,
		    "hidden": 1,
		    "type": 1,
		},
		{
		    "id": 100104,
		    "parentId": 100100,
		    "icon": "",
		    "name": "菜单管理",
		    "path": "",
		    "uri": "",
		    "sort": 3,
		    "hidden": 1,
		    "type": 1,
		},
	]
  },
  {
    "id": 100200,
    "parentId": 0,
    "icon": "message",
    "name": "新闻管理",
    "path": "",
    "uri": "",
    "sort": 1,
    "hidden": 1,
    "type": 0,
    "children":[
		{
		    "id": 100201,
		    "parentId": 100200,
		    "icon": "",
		    "name": "新闻首页维护",
		    "path": "",
		    "uri": "",
		    "sort": 0,
		    "hidden": 1,
		    "type": 1,
		},
		{
		    "id": 100202,
		    "parentId": 100200,
		    "icon": "",
		    "name": "置顶新闻",
		    "path": "",
		    "uri": "",
		    "sort": 1,
		    "hidden": 1,
		    "type": 1,
		},
		{
		    "id": 100203,
		    "parentId": 100200,
		    "icon": "",
		    "name": "专题新闻",
		    "path": "",
		    "uri": "",
		    "sort": 2,
		    "hidden": 1,
		    "type": 1,
		},
		{
		    "id": 100204,
		    "parentId": 100200,
		    "icon": "",
		    "name": "地方性新闻",
		    "path": "",
		    "uri": "",
		    "sort": 3,
		    "hidden": 1,
		    "type": 1,
		},
	]
  },
]

方式二:

后端不携带children字段,返回所有数据由前端进行处理,如下格式:

const testMenuList = [
  {
    "id": 100100,
    "parentId": 0,
    "icon": "setting",
    "name": "系统管理",
    "path": "",
    "uri": "",
    "sort": 0,
    "hidden": 1,
    "type": 0,
  },
  {
    "id": 100101,
    "parentId": 100100,
    "icon": "",
    "name": "app版本管理",
    "path": "project/cms/system/app/index",
    "uri": "project/cms/system/app",
    "sort": 0,
    "hidden": 1,
    "type": 1,
  },
  {
    "id": 100102,
    "parentId": 100100,
    "icon": "",
    "name": "部门管理",
    "path": "project/cms/system/department/index",
    "uri": "project/cms/system/department",
    "sort": 1,
    "hidden": 1,
    "type": 1,
  },
  {
    "id": 100103,
    "parentId": 100100,
    "icon": "",
    "name": "角色管理",
    "path": "project/cms/system/role/index",
    "uri": "project/cms/system/role",
    "sort": 2,
    "hidden": 1,
    "type": 1,
  },
  {
    "id": 100104,
    "parentId": 100100,
    "icon": "",
    "name": "菜单管理",
    "path": "project/cms/system/menu/index",
    "uri": "project/cms/system/menu",
    "sort": 3,
    "hidden": 1,
    "type": 1,
  },
  {
    "id": 100200,
    "parentId": 0,
    "icon": "message",
    "name": "新闻管理",
    "path": "",
    "uri": "",
    "sort": 1,
    "hidden": 1,
    "type": 0,
  },
  {
    "id": 100201,
    "parentId": 100200,
    "icon": "",
    "name": "新闻首页维护",
    "path": "project/cms/news/frontpage/index",
    "uri": "project/cms/news/frontpage",
    "sort": 0,
    "hidden": 1,
    "type": 1,
  },
  {
    "id": 100202,
    "parentId": 100200,
    "icon": "",
    "name": "置顶新闻",
    "path": "project/cms/news/top/index",
    "uri": "project/cms/news/top",
    "sort": 1,
    "hidden": 1,
    "type": 1,
  },
  {
    "id": 100203,
    "parentId": 100200,
    "icon": "",
    "name": "专题新闻",
    "path": "project/cms/news/special/index",
    "uri": "project/cms/news/special",
    "sort": 2,
    "hidden": 1,
    "type": 1,
  },
  {
    "id": 100204,
    "parentId": 100200,
    "icon": "",
    "name": "地方性新闻",
    "path": "project/cms/news/original/index",
    "uri": "project/cms/news/original",
    "sort": 3,
    "hidden": 1,
    "type": 1,
  },
]

处理函数如下:

/**
将数组转为树形
*/
export function ofList(
    data,
    rootIndex,
    itemHandler = item => item,
    current = 'id',
    parentId = 'parentId',
    children = 'children',
  ) {
    const treeData = [];
  
    let index = 0;
  
    while (index < data.length) {
      const item = itemHandler(data[index]);
  
      if (item[parentId] === rootIndex) {
        data.splice(index, 1);
        const childrens = ofList(data, item[current], itemHandler, current, parentId, children);
        item[children] = childrens.length > 0 ? childrens : undefined;
        treeData.push(item);
        index = 0;
      } else {
        index += 1;
      }
    }
  
    return treeData;
}

处理后的数据就是方式一的数据格式。因为最近在写前端,所以就在前端处理一下数据,后期赋上方式一的处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2037531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

electron+vue搭建命令

electronvue搭建 要使用Electron和Vue来搭建一个桌面应用程序&#xff0c;你可以遵循以下步骤&#xff1a; 1.创建一个Vue项目&#xff1a; vue create my-electron-app2.进入项目目录&#xff1a; cd my-electron-app3.添加Electron&#xff1a; vue add electron-builde…

指针初阶1(学习编程的第二十四天)

1.指针是什么&#xff1f; 编号可以抽象为地址&#xff0c;地址就可以抽象为指针 2.指针和指针类型 指针类型的意义&#xff1a;1.指针类型决定了 指针解引用的权限有多大 int有4个字节 double有8个 char只有1个 2.指针类型决定了&#xff0c;指针走一步&#xff0c;能走多…

自回归分布滞后模型 (ARDL)及 Stata 具体操作步骤

目录 一、引言 二、文献综述 三、理论原理 四、实证模型 五、程序代码及解释 六、代码运行结果 一、引言 自回归分布滞后模型&#xff08;Autoregressive Distributed Lag Model&#xff0c;简称 ARDL&#xff09;在时间序列分析中具有重要的地位&#xff0c;它能够同时捕…

八种排序算法的复杂度(C语言)

归并排序(递归与非递归实现,C语言)-CSDN博客 快速排序(三种方法,非递归快排,C语言)-CSDN博客 堆排序(C语言)-CSDN博客 选择排序(C语言)以及选择排序优化-CSDN博客 冒泡排序(C语言)-CSDN博客 直接插入排序(C语言)-CSDN博客 希尔排序( 缩小增量排序 )(C语言)-CSDN博客 计数…

【文件IO】文件内容操作

读文件、写文件&#xff0c;都是操作系统提供了 API&#xff0c;在 Java 中也进行了封装&#xff0c;叫“文件流”/“IO流” Stream 流&#xff0c;形象比喻&#xff0c;水流/气流 水流的特点&#xff1a;我要通过水龙头&#xff0c;接 1000ml 水 直接一口气&#xff0c;把 100…

µC/OS-III

第一章 μCOS 简介 1.1 初识 μCOS 实际上&#xff0c;一个 CPU 核心在某一时刻只能运行一个任务&#xff0c;由于切换处理任务的速度非常快&#xff0c;因此给人造成了一种同一时刻有多个任务同时运行的错觉。 操作系统的分类方式可以由任务调度器的工作方式决定&am…

RCE漏洞基础初了解

目录 一、简介 二、php的命令执行函数 2.1 exec 2.2 passthru 2.3 shell_exec 2.4 popen 三、代码执行 3.1 php的回调后门 3.1.1 回调后门的老祖宗 3.1.2 数组造成单参数回调后门 3.1.3 绕过安全狗 ​编辑 四、来看看php中webshell奇淫技巧 4.1eval长度限制突破方法…

problem with running OpenAI Cookbook‘s chatbot

题意&#xff1a;运行 OpenAI Cookbook 的聊天机器人时遇到问题 问题背景&#xff1a; Im having trouble running the chatbot app in the OpenAI Cookbook repository. 我在运行 OpenAI Cookbook 仓库中的聊天机器人应用程序时遇到了问题。 What I tried 我尝试的内…

240810-Gradio通过HTML组件打开本地文件+防止网页跳转到about:blank

A. 最终效果 B. 可通过鼠标点击打开文件&#xff0c;但会跳转到about:blank import gradio as gr import subprocessdef open_pptx():pptx_path /Users/liuguokai/Downloads/240528-工业大模型1.pptxtry:subprocess.Popen([open, pptx_path])return "PPTX file opened s…

七、3 AD单通道(代码)

1、步骤 &#xff08;1&#xff09;开启GPIO和ADC的时钟、配置ADCCLK的分频器 &#xff08;2&#xff09;配置GPIO &#xff08;3&#xff09;配置多路开关&#xff08;把左边的通道接入到右边的规则组中&#xff09; &#xff08;4&#xff09;配置ADC转换器 &#xff08;…

HarmonyOs编写一个案例实现一个照片选择(阶段进阶 四种需求 逐一完善)

需求1. .实现照片选择 并将选择好的照片展示出来 import { GoodItem } from ../06/modules;Entry Component struct PhotoPage {State message: string 实现一个相册;State List: GoodItem[] [{goods_name: dsfjlsjkfsf,goods_price: 100,goods_img: https://img1.baidu.com…

Springboot3 配置sql打印到控制台

一、pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId><version>3.1.2</version></dependency> 二、application.yml com.lingyang.system # log4j2配…

《密码编码学与网络安全原理与实践》第十一章、第十二章、第十三章 数据完整性算法

数据完整性算法 概念消息加密实现认证对称加密提供认证公钥加密提供认证 Hash函数要求满足特点哈希函数安全性要求密码分析基于分组密码链接的Hash函数生日攻击&#xff1a; MD5SHA-256算法步骤SHA-3散列函数实现消息认证散列函数实现消息认证方法一散列函数实现消息认证方法二…

HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求

引言 在现代Web开发中&#xff0c;HTTP请求的高效性和可靠性对于应用的整体性能至关重要。ASP.NET Core提供了HttpClient类&#xff0c;它是一个强大且灵活的工具&#xff0c;可以用来发送HTTP请求并处理响应。然而&#xff0c;如何在ASP.NET Core中实现高效的HTTP请求&#x…

Java基础篇/IO流的介绍和了解

一、java的IO是基于流&#xff08;stream&#xff09;概念的&#xff0c;什么是流: 在Java中&#xff0c;流&#xff08;Stream&#xff09;是一种抽象的数据传输方式&#xff0c;它代表了数据的序列。流可以用于表示来自各种源的数据输入&#xff0c;以及向各种目的地发送数据…

商品信息采集技巧大公开:五种高效采集方法分享

摘要&#xff1a; 面对日益激烈的电商竞争&#xff0c;高效采集淘宝商品信息成为商家致胜的关键。本文将揭秘2024年最实用的五种淘宝商品信息采集技巧&#xff0c;助您在大数据时代抢占先机&#xff0c;提升市场竞争力。 一、为何淘宝商品信息采集如此重要&#xff1f; 在电…

新闻稿件管理系统

TOC springboot109新闻稿件管理系统 系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理新…

社区团购独立源码最新版,包含小程序前端、管理后台、数据库

介绍&#xff1a; 社区拼团&#xff0c;社区电商等形式的新型社交电商平台源码。独创双模式&#xff1a;以团长为中心&#xff0c;以小区为中心&#xff0c;首款支持社区团购加社群团购模式的团购小程序&#xff0c;线上线下双模式&#xff0c;后台自由配置配送方式。 更新说…

五分钟学会辨别葡萄酒的优劣

不论是买什么商品&#xff0c;人们都十分关心品质。比如&#xff0c;要买葡萄酒&#xff0c;你首先要确认的就是这款酒好不好。那么&#xff0c;如何才能做到快速识别葡萄酒的好坏呢&#xff1f; 一、观察外观 首先&#xff0c;观察干红葡萄酒的外观是初步判断其品质的第一步。…

IP基础(通俗易懂版)

IP 位于 TCP/IP 参考模型的第三层&#xff0c;也就是⽹络层。 ⽹络层的主要作⽤是&#xff1a;实现主机与主机之间的通信&#xff0c;也叫点对点通信。 1 、网络层&#xff08; IP) 与数据链路层 (MAC) 有什么关系呢&#xff1f; MAC 的作用&#xff1a; 实现【直连】的两个…