当前位置: 首页 > article >正文

树形查询转成TreeNode[],添加新节点

在使用PrimeVue的TreeTable组件时,需要将带有层级的数据转换为TreeNode[]类型的数据结构。TreeNode是PrimeVue中定义的一个接口,用于表示树节点。通常,带有层级的数据是一个嵌套的对象或数组,其中每个对象可能包含子对象,形成树状结构。

以下是一个将带有层级的数据转换为TreeNode[]的示例方法:

假设你的数据结构如下:

const data = [
  {
    id: 1,
    name: 'Node 1',
    children: [
      {
        id: 2,
        name: 'Node 1.1',
        children: [
          {
            id: 3,
            name: 'Node 1.1.1'
          }
        ]
      },
      {
        id: 4,
        name: 'Node 1.2'
      }
    ]
  },
  {
    id: 5,
    name: 'Node 2'
  }
];

你可以使用递归函数将其转换为TreeNode[]:

function convertToTreeNode(data) {
  return data.map(item => {
    const node: TreeNode = {
      data: item,
      children: item.children? convertToTreeNode(item.children) : []
    };
    return node;
  });
}

const treeNodes = convertToTreeNode(data);

在这个示例中,convertToTreeNode函数接受一个带有层级的数据对象,并返回一个TreeNode[]类型的数组。每个TreeNode对象包含一个data属性,用于存储原始数据对象,以及一个children属性,用于存储子节点的TreeNode对象。

转换后的数据可以直接用于PrimeVue的TreeTable组件:

<template>
  <TreeTable :value="treeNodes">
    <Column field="name" header="Name"></Column>
  </TreeTable>
</template>

<script>
import { TreeTable, Column } from 'primevue/treetable';
import { TreeNode } from 'primevue/api';

export default {
  components: {
    TreeTable,
    Column
  },
  data() {
    return {
      treeNodes: []
    };
  },
  mounted() {
    // 假设你的数据已经通过API获取并存储在data变量中
    const data = [
      // 数据结构同上
    ];
    this.treeNodes = convertToTreeNode(data);
  },
  methods: {
    convertToTreeNode(data) {
      // 转换函数同上
    }
  }
};
</script>

这样,你就可以在TreeTable组件中显示带有层级的数据了。

以下是在JavaScript中为Node 2添加一个子节点的示例代码:

// 假设这是原始数据结构
const data = [
    {
        id: 1,
        name: 'Node 1',
        children: [
            {
                id: 2,
                name: 'Node 1.1',
                children: [
                    {
                        id: 3,
                        name: 'Node 1.1.1'
                    }
                ]
            },
            {
                id: 4,
                name: 'Node 1.2'
            }
        ]
    },
    {
        id: 5,
        name: 'Node 2'
    }
];

// 找到Node 2对象
const node2 = data.find((node) => node.id === 5);

// 创建新的子节点
const newChild = {
    id: 6,
    name: 'Node 2.1'
};

// 如果Node 2还没有children属性,则创建一个空数组并添加新子节点
if (!node2.children) {
    node2.children = [];
}
node2.children.push(newChild);

console.log(data);

在上述代码中:

  1. 首先使用find方法在数据结构中找到id5(即Node 2)的对象。

  2. 然后创建了一个新的子节点对象。

  3. 接着检查Node 2是否已经有children属性,如果没有则创建一个空数组。

  4. 最后将新子节点添加到Node 2children数组中。


http://www.kler.cn/a/458612.html

相关文章:

  • playwright的page.wait_for 常见用法
  • Spring Boot介绍、入门案例、环境准备、POM文件解读
  • 【笔记】在虚拟机中通过apache2给一个主机上配置多个web服务器
  • C++ 设计模式:中介者模式(Mediator Pattern)
  • 强化学习(1)
  • Nature+Science=ONNs(光学神经网络)
  • MongoDB 管理工具
  • C# 使用Newtonsoft.Json
  • 数据库的创建使用与查找
  • 【集合】——LinkedList
  • 机器算法之逻辑回归(Logistic Regression)详解
  • 【Leetcode 热题 100】208. 实现 Trie (前缀树)
  • LeetCode 876:链表的中间节点
  • 典型常见的基于知识蒸馏的目标检测方法总结三
  • Langchain Chat Model 和 Chat Prompt Template
  • 【Axios】如何在Vue中使用Axios请求拦截器
  • Flutter DragTarget拖拽控件详解
  • Effective C++ 条款30:透彻了解 inlining 的里里外外
  • vue 中 ref 详解
  • 移动机器人推动制造业向自动化转升级
  • 数据仓库和数据湖 数据仓库和数据库
  • AI写标书工具:高效智能的标书撰写助手——标小兔
  • 高效设计AI Prompt:10大框架详细对比与应用
  • 【K8S系列】深入解析K8S服务的无状态与有状态
  • CPU、DPU、GPU
  • 华三与华为ACL,及ACL+QOS的区别