运行结果图:
<!--
* @Description:
* @Autor: mqq
* @Date: 2022-12-04 12:15:51
* @LastEditors:
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
let treeData = [
{
id: 1,
name: "部门1",
pid: 0,
},
{
id: 2,
name: "部门2",
pid: 1,
},
{
id: 22,
name: "部门22",
pid: 0,
},
{
id: 23,
name: "部门23",
pid: 0,
},
{
id: 3,
name: "部门3",
pid: 2,
},
{
id: 4,
name: "部门4",
pid: 3,
},
{
id: 5,
name: "部门5",
pid: 4,
},
{
id: 6,
name: "部门6",
pid: 5,
},
];
/**
* @description: 数组转换成tree
* @param {*} arr
* @param {*} pid
* @return {*}
*/
function formatTree(arr, id = 0) {
let newArr = [];
arr.forEach((item) => {
if (item.pid == id) {
item.children = formatTree(arr, item.id);
newArr.push({
...item,
});
}
});
return newArr;
}
let tree = formatTree(treeData, 0);
/**
* @description: tree 转换成 打平的数组
* @param {*} tree
* @return {*}
*/
function flatTree(tree) {
let treeData = [];
tree.forEach((item) => {
if (item.children.length) {
treeData.push(...flatTree(item.children));
}
delete item.children;
treeData.push(item);
});
return treeData;
}
console.log(formatTree(treeData, 0));
console.log(flatTree(tree));
</script>
</body>
</html>