数据源准备
let tree = [
{ id: 1, pid: 'root', name: '1' },
{ id: 2, pid: 1, name: '2' },
{ id: 3, pid: 1, name: '3' },
{ id: 4, pid: 'root', name: '4' },
{ id: 5, pid: 4, name: '4' },
{ id: 6, pid: 4, name: '5' },
{ id: 7, pid: 3, name: '7' },
{ id: 8, pid: 4, name: '8' },
]
List转Tree
function treeData(data) {
let cloneData = JSON.parse(JSON.stringify(data))
return cloneData.filter(father => {
let branchArr = cloneData.filter(child => father['id'] == child['pid']);
branchArr.length > 0 ? father['children'] = branchArr : '';
return father['pid'] == 'root';
})
}
var newTree = treeData(tree)
console.log(newTree);
Tree转List
function ListData(data,pid) {
return data.reduce((arr, { id, name, children = [] }) =>
arr.concat([{ id, name, pid }], ListData(children, id)), [])
}
var newList = ListData(newTree,'root');
console.log(newList)
结果: