树的源数据
treeData: { "label": "中国", "children": [ { "label": "浙江", "children": [ {"label": "杭州"}, {"label": "宁波"}, ] }, { "label": "广西", "children": [ { "label": "桂林", "children": [ {"label": "秀峰区"}, {"label": "叠彩区"}, ] }, {"label": "南宁"}, ] }, { "label": "黑龙江", }, { "label": "新疆", } ] }
获取树的深度
// 获取树的深度 function getTreeDeep(treeData) { let arr = []; arr.push(treeData); let depth = 0; while (arr.length > 0) { let temp = []; for (let i = 0; i < arr.length; i++) { temp.push(arr[i]); } arr = []; for (let i = 0; i < temp.length; i++) { if (temp[i].children && temp[i].children.length > 0) { for (let j = 0; j < temp[i].children.length; j++) { arr.push(temp[i].children[j]); } } } if (arr.length >= 0) { depth++; } } return depth; }
使用
this.treeDeep = getTreeDeep(this.treeData)
提取并统计树所有的节点
// 提取树的所有节点,最终树的所有节点都会存入传入的nodeList数组中 function getAllTreeNode(treeData, nodeList) { // 判断是否为数组 if (Array.isArray(treeData)) { treeData.forEach(item => { if (item.children && item.children.length > 0) { nodeList.push(item) getAllTreeNode(item.children, nodeList) } else { nodeList.push(item) } }) } else { if (treeData.children && treeData.children.length > 0) { nodeList.push(treeData) getAllTreeNode(treeData.children, nodeList) } else { nodeList.push(treeData) } } }
使用 —— 提取所有叶子节点到 treeNodeList
getAllTreeNode(this.treeData, this.treeNodeList)
节点总数为
this.treeNodeList.length
提取并统计树的叶子节点
// 提取树的叶子节点,最终所有树的叶子节点都会存入传入的leafList数组中 function getTreeLeaf(treeData, leafList) { // 判断是否为数组 if (Array.isArray(treeData)) { treeData.forEach(item => { if (item.children && item.children.length > 0) { getTreeLeaf(item.children, leafList) } else { leafList.push(item) } }) } else { if (treeData.children && treeData.children.length > 0) { getTreeLeaf(treeData.children, leafList) } else { leafList.push(treeData) } } }
使用 —— 提取所有叶子节点到 treeLeafList
getTreeLeaf(this.treeData, this.treeLeafList)
叶子节点总数为
this.treeLeafList.length
添加节点
添加兄弟节点
选中一个节点后,添加兄弟节点【递归】
添加子节点
vue中操作树,selectNode为选中节点构成的数组
修改节点
删除节点