阅读 175

一道【树、表】互转的题目

出一个简单实用的题

众所周知,树型结构的数据,存在数据库里,是每条数据存一行,以并且有一个属性 pid 表示他的父元素是谁。

我们使用的时候,其数据结构通常如下:

// 树形结构数据示例
let treeData = [
    {
        id: '1', pid: null, label: '1',
        children: [
            {
                id: '1-1', pid: '1', label: '1-1',
                children: [
                    {
                        id: '1-1-1', pid: '1-1', label: '1-1-1',
                    }
                ]
            },
            {
                id: '1-2', pid: '1', label: '1-2'
            }
        ]
    },
    {
        id: '2', pid: null, label: '2',
        children: [
            {
                id: '2-1', pid: '2', label: '2-1'
            },
            {
                id: '2-2', pid: '2', label: '2-2'
            }
        ]
    }
]

// 表型结构数据示例
let tableData = [
    {id: '1', pid: null, label: '1'},
    {id: '1-1', pid: '1', label: '1-1'},
    {id: '1-1-1', pid: '1-1', label: '1-1-1'},
    {id: '1-2', pid: '1', label: '1-2'},
    {id: '2', pid: null, label: '2'},
    {id: '2-1', pid: '2', label: '2-1'},
    {id: '2-2', pid: '2', label: '2-2'}
]
复制代码

于是,有两道题:

1、把从数据库里查到的,数组结构的数据,转为树形结构的数据(表转树); 2、把树形结构的数据,转为可以存入数据库的,数组结构的熟虑(树转表);

// 树转表
const TreeToTable = (treeData)=>{
    // ...
    return tableData;
}

// 表转树
const TableToTree = (tableData)=>{
    // ...
    return treeData
}
复制代码

要求:

所有代码全部手写,不能用除了原生之外的第三方代码。

升级版:

1、树表联动。改动树或表其中一个数据,另一个数据也可以随之改变

最后

大家可以把自己写好的代码,传到github,然后通过评论回复自己的代码 Github 链接。

也可以在此基础上,添加更多的升级版问题。在评论里发出来,互相探讨。

关注下面的标签,发现更多相似文章
评论