function createTree(deep) {
let children = {};
let tree = { id: 0 ,children};
for (let i = 1; i <= deep; i++) {
children.id = i;
children.children = {}
children = children.children; //不太理解这里
}
return tree;
}
let tree = createTree(6);
看他每次循环都只生成了一个节点,怎么把他遍历到tree中的呢?
children = children.children;
遍历到下一层
这段代码实现了创建一棵指定深度 deep 的树,并返回树的根节点。
可以理解为,代码中的 children
变量实际上是一个指向当前节点的指针,每次循环执行时都将其指向当前节点的子节点,并在子节点创建一个新的空 children
对象,从而实现了向下“延伸”树节点的效果。而因为每个节点都包含其子节点的引用,因此在根节点处访问整棵树时,可以通过节点之间的引用关系轻易地遍历整个树。
可以画一张图来更好的理解。举个例子,假设深度为 3,那么最终的树形结构长这样:
1
/ \
2 3
/ \
4 5
在代码执行过程中,变量的变化如下:
循环次数 | children | tree |
---|---|---|
1 | {} | { id: 0, children: {} } |
2 | { id: 1, children: {} } | { id: 0, children: { id: 1, children: {} } } |
3 | { id: 2, children: {} } | { id: 0, children: { id: 1, children: { id: 2, children: {} } } } |
4 | {} | { id: 0, children: { id: 1, children: { id: 2, children: {}}}} |
5 | { id: 4, children: {} } | { id: 0, children: { id: 1, children: { id: 2, children: { id: 4, children: {} }}}} |
6 | { id: 5, children: {} } | { id: 0, children: { id: 1, children: { id: 2, children: { id: 4, children: {}, id: 5, children: {} }}}} |
可以看到,在每次循环中,变量 children
都指向当前节点,并逐步“延伸”到下一层节点。最后在根节点处将整个树返回。
每次到children = children.children,children重新赋值,children代表的是children.children位置的数据,及children指向children.children
不知道你这个问题是否已经解决, 如果还没有解决的话:{
path: '/',
alias: '/homee',
name: 'Home',
component: Layout,
children: [
{
path: 'folder_tree',
component: () => import('@/views/folder-tree/folder-tree.vue')
}
]
}
export const getFolderList = () => {
return axios.request({
url: '/getFolderList',
method: 'get'
})
}
export const getFileList = () => {
return axios.request({
url: '/getFileList',
method: 'get'
})
}
//文件数据
export const getFileList = () => {
const template = {
'name|5': '@cword',
'creat_time': '@datetime',
'folder_id|1-5': 0,
'id|+1': 10000
}
let arr = []
doCustomTimes(10, () => {
arr.push(Mock.mock(template))
})
return arr
}
//文件夹数据
export const getFolderList = () => {
const template1 = {
'name|1': '@word',
'creat_time': '@datetime',
'folder_id': 0,
'id|+1': 1
}
const template2 = {
'name|1': '@word',
'creat_time': '@datetime',
'folder_id': 1,
'id|+1': 4
}
let arr = []
doCustomTimes(3, () => {
arr.push(Mock.mock(template1))
})
doCustomTimes(2, () => {
arr.push(Mock.mock(template2))
})
return arr
}
import Mock from 'mockjs'
// import { getUserInfo, login, authorization } from './response/user'
import { getTableData, getFileList, getFolderList } from './response/data'
// const Random = Mock.Random
// Mock.mock(/\/getUserInfo/, 'post', getUserInfo)
// Mock.mock(/\/login/, 'post', login)
// Mock.mock(/\/authorization/, 'get', authorization)
Mock.mock(/\/getTableData/, 'get', getTableData)
Mock.mock(/\/getFileList/, 'get', getFileList)
Mock.mock(/\/getFolderList/, 'get', getFolderList)
// Mock.setup({
// timeout: 0
// })
// Random.extend({
// fruit () {
// const fruit = ['apple', 'peach', 'lemon']
// return this.pick(fruit)
// }
// })
export default Mock