实际项目中,经常会遇到树形结构与数组相互转换的问题,所以整理出来,分享给大家。
假如我们有一下数据:
const arr =[ {id:2,name:'部门 B',parentId:0}, {id:3,name:'部门 C',parentId:1}, {id:1,name:'部门 A',parentId:2}, {id:4,name:'部门 D',parentId:1}, {id:5,name:'部门 E',parentId:2}, {id:6,name:'部门 F',parentId:3}, {id:7,name:'部门 G',parentId:2}, {id:8,name:'部门 H',parentId:4} ];
数组转树方法:
function toTree (data, pId) { const loop = parentId => { const res = [] data.forEach(item => { if (item.parentId === parentId) { item.children = loop(item.id) res.push(item) } }) return res } return loop(pId) }
树转数组方法:
function treeToArr(data) { const result = []; data.forEach(item => { const loop = data => { result.push({ id: data.id, name: data.name, parentId: data.parentId }); let child = data.children if(child){ for(let i = 0; i < child.length; i++){ loop(child[i]) } } } loop(item); }) return result; }