# 处理树结构常用算法 常用的算法大多可以在tree.js中找到,下面列举一些常用的 ## transformToArrayFormat 将嵌套结构转换为id,pId解构的一维数组 ```javascript const tree = [ { id: "root", children: [ { id: "1-1", children: [ { id: "1-1-1" } ] }, { id: "1-2" } ] } ]; const arrayFormat = BI.Tree.transformToArrayFormat(tree); // arrayFormat = [ // { // "id": "root" // }, // { // "id": "1-1", // "pId": "root" // }, // { // "id": "1-1-1", // "pId": "1-1" // }, // { // "id": "1-2", // "pId": "root" // } // ]; ``` ## transformToTreeFormat 将id,pId结构的一维数组转换为嵌套结构 ```javascript const arrayFormat = [ { "id": "root" }, { "id": "1-1", "pId": "root" }, { "id": "1-1-1", "pId": "1-1" }, { "id": "1-2", "pId": "root" } ]; const tree = BI.Tree.transformToTreeFormat(arrayFormat); // tree = [ // { // id: "root", // children: [ // { // id: "1-1", // children: [ // { // id: "1-1-1" // } // ] // }, { // id: "1-2" // } // ] // } // ]; ``` ## traversal遍历树结构 `BI.Tree.traversal`方法深度优先,迭代函数传递索引,当前节点,父节点参数,迭代函数中返回`false`将终止遍历 ```javascript const tree = [ { id: "root", children: [ { id: "1-1", children: [ { id: "1-1-1" } ] }, { id: "1-2" } ] } ]; BI.Tree.traversal(tree, (index, item, parentNode) => { console.log(index, item.id, parentNode ? parentNode.id : null); }); // 0 'root' null // 0 '1-1' 'root' // 0 '1-1-1' '1-1' // 1 '1-2' 'root' ```