React将数据转化成树形结构

news/2024/11/28 6:39:21/

1、React将数据转化成树形结构


// 初始数据
let result = [{ parentId: null, id: 1, name: "书籍", count: 100 },{ parentId: 1, id: 2, name: "西游记", count: 50 },{ parentId: 1, id: 3, name: "红楼梦", count: 10 },{ parentId: 1, id: 4, name: "水浒传", count: 20 },{ parentId: 1, id: 5, name: "三国演义", count: 20 },{ parentId: null, id: 6, name: "文具", count: 10 },{ parentId: 6, id: 7, name: "铅笔", count: 5 },{ parentId: 6, id: 8, name: "橡皮", count: 5 },
];const getTreeData = (treeData, parentId) => {// 把数据转化为树型结构let tree = [];let currentParentId = parentId || null;for (let i = 0; i < treeData.length; i += 1) {if (treeData[i]) {if (treeData[i].parentId === currentParentId) {tree.push(treeData[i]);}}}for (let j = 0; j < tree.length; j += 1) {if (tree[j]) {let children = getTreeData(treeData, tree[j].id);if (children && children.length) {tree[j].children = children;}}}return tree;
};// 树形数据
let data = getTreeData(result);
console.log(data);
/*[{parentId: null,id:1,name:'书籍',count:100,children:[{parentId:1,id:2,name:'西游记',count: 50},{parentId:1,id:3,name:'红楼梦',count: 10},{parentId:1,id:4,name:'水浒传',count: 20},{parentId:1,id:5,name:'三国演义',count: 20},]},{parentId: null,id:6,name:'文具',count:10,children:[{parentId:6,id:7,name:'铅笔',count:5},{parentId:6,id:8,name:'橡皮',count:5},]}
]*/

2、实例(react antd table树形数据)

线上地址:react antd table 树形结构数据


import React, { useState, useEffect } from 'react';
import { Table } from 'antd';const Test = () => {const [expandedRowKeys, setExpandedRowKeys] = useState([]);const [dataSource, setDataSource] = useState([]);const columns = [{title: '名称',key: 'name',dataIndex: 'name',},{title: '描述',key: 'desc',dataIndex: 'desc',},];const onExpandTable = (expanded, record) => {let arr = expandedRowKeys;if (expanded) {arr.push(record.id);} else {arr.splice(arr.findIndex((i) => i === record.id),1);}setExpandedRowKeys(arr);};const getTreeData = (treeData, parentId) => {// 把数据转化为树型结构let tree = [];let currentParentId = parentId || null;for (let i = 0; i < treeData.length; i += 1) {if (treeData[i]) {if (treeData[i].parentId === currentParentId) {tree.push(treeData[i]);}}}for (let j = 0; j < tree.length; j += 1) {if (tree[j]) {let children = getTreeData(treeData, tree[j].id);if (children && children.length) {tree[j].children = children;}}}return tree;};useEffect(() => {const res = [{parentId: null,id: '0e02f058-65fc-4e47-82d5-3aaf95f816cd',name: '中国',desc: '中国陆地面积约9600000平方千米',},{parentId: '0e02f058-65fc-4e47-82d5-3aaf95f816cd',id: '03014a12-3948-4f8a-b182-ed8b6d58a7ea',name: '四川',desc: '四川地域面积约486000平方公里',},{parentId: '0e02f058-65fc-4e47-82d5-3aaf95f816cd',id: '201f9c09-f2e8-4bea-917e-b5fdc56d9e24',name: '山东',desc: '陆域面积约155800平方公里',},{parentId: '03014a12-3948-4f8a-b182-ed8b6d58a7ea',id: '305d7648-9e3e-4b25-a246-3be08344434e',name: '成都',desc: '成都地域面积约14335平方公里',},{parentId: '201f9c09-f2e8-4bea-917e-b5fdc56d9e24',id: '3898961f-7487-46d6-8595-f2dfac59b116',name: '济南',desc: '济南地域面积约10244.45平方公里',},];let data = getTreeData(res);console.log('data: ', data);setDataSource(data);}, []);return (<><Tablecolumns={columns}dataSource={dataSource}rowKey={(record) => record.id}expandedRowKeys={expandedRowKeys}onExpand={onExpandTable}pagination={false}/></>);
};export default Test;

http://www.ppmy.cn/news/715595.html

相关文章

Ubuntu 20.04 LTS SPEC CPU 2017 cpu2017-1_0_5.iso 安装、测试 笔记

环境 $ gcc -v Using built-in specs. COLLECT_GCCgcc COLLECT_LTO_WRAPPER/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper OFFLOAD_TARGET_NAMESnvptx-none:amdgcn-amdhsa OFFLOAD_TARGET_DEFAULT1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pk…

执行sqlplus / as sysdba报错ORA-01031: insufficient privileges

背景&#xff1a; 从线上环境copy OracleHome到线下做测试环境&#xff0c;修改完pfile后执行sqlplus / as sysdba报错 [erparcxxx.com ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Mon Feb 14 16:26:00 2022Copyright (c) 1982, 2013, Oracle. All r…

记一次数组越界的BUG

&#xff08;这是19年遇到的一个问题&#xff0c;现在回来看看&#xff0c;有了不一样的收获~&#xff09; 问题&#xff1a;Android下执行reboot recovery后&#xff0c; 黑屏无输出&#xff0c;重新上电也还是黑屏 具体现象&#xff1a;执行reboot recovery后&#xff0c;进…

android porting usb audio,android - 在android中启动时找不到audio-hal-2-0 - 堆栈内存溢出...

我正在为Resenas Rcar-H3开发板构建android 9。 构建过程成功。 但是,在将映像刷新到电路板上之后,启动过程将无法正常进行。 audioserver由初始化进程重新启动,并通知一些错误,如下所示: [ 737.947862] init: Service audioserver (pid 2734) exited with status 1 [ 737…

Nginx——Nginx反向代理

目录 1、Nginx反向代理概述 1.1、Nginx正向代理 1.2、Nginx反向代理 1.2.1、Nginx反向代理的配置语法 1.2.2、Nginx反向代理实战 2、Nginx的安全控制 2.1、如何使用SSL对流量进行加密 2.1.1、nginx添加SSL的支持 2.1.2、Nginx的SSL相关指令 2.1.3、生成证书 2.1.4、…

BGP概述及基础配置(一)

BGP概述及基础配置&#xff08;一&#xff09; 一、BGP——边界网关协议 BGP是一种实现自治系统AS之间的路由可达&#xff0c;并选择最佳路由的距离矢量路由协议。 AS概述&#xff1a;指的是在同一个组织管理下&#xff0c;使用相同选路策略的设备的集合。 不同AS通过AS号区…

Nmap-06:Nmap的NSE脚本使用

目录 1.NSE介绍 2.NSE的使用 3.NSE分类使用 4.NSE调试功能使用 5.NSE参数的使用 6.NSE更新 7.NSE脚本分类 1.NSE介绍 NSE&#xff08;Nmap Script Engine&#xff09;是Nmap脚本引擎&#xff0c;内置了很多可以用来扫描的、针对特定任务的脚本。通过NSE可以不断拓展Nmap…

【9929】潜水员

Time Limit: 1 second Memory Limit: 128 MB 【问题描述】 潜水员为了潜水要使用特殊的装备。他有一个带2种气体的气缸&#xff1a;一个为氧气&#xff0c;一个为氮气。让潜水员下潜的深度需要各种的数量 的氧和氮。潜水员有一定数量的气缸。每个气缸都有重量和气体容量。潜水员…