function getTreeS() { const time = new Date().getTime() treeS(treeData) const timeEnd = new Date().getTime() console.log((timeEnd - time) + 'ms') console.log(tree(treeData)) } 代码-
const treeData = [ { id: 1, pid: 0, path: '/1'}, { id: 2, pid: 1, path: '/2'}, { id: 3, pid: 1, path: '/3'}, { id: 4, pid: 1, path: '/4'}, { id: 5, pid: 0, path: '/5'}, { id: 6, pid: 5, path: '/6'}, { id: 7, pid: 5, path: '/7'}, { id: 8, pid: 6, path: '/8'}, { id: 9, pid: 6, path: '/9'}, { id: 10, pid: 7, path: '/10'}, { id: 11, pid: 7, path: '/11'}, { id: 12, pid: 8, path: '/12'}, { id: 13, pid: 12, path: '/13'}, { id: 14, pid: 13, path: '/14'}, { id: 15, pid: 14, path: '/15'}, { id: 16, pid: 0, path: '/16'}, { id: 17, pid: 16, path: '/17'}, { id: 18, pid: 16, path: '/18'}, { id: 19, pid: 16, path: '/19'}, { id: 20, pid: 16, path: '/20'} ] 代码二
function treeS(data, pid = 0){ const newData = data.filter(function (item) { return item.pid === pid }) data = data.filter(function (item) { return item.pid !== pid }) for (let i = 0; i < newData.length; i++) { const rtData = treeS(data, newData[i].id) if (rtData && rtData.length > 0) { console.log(rtData) newData[i].children = [] newData[i].children.push(rtData) } } return newData } 代码三
一。树形数据整合。
代码一::为时间测试代码。
代码二:为测试数据。
代码三: 为整合树形数据的方法。
性能:120条数据大约需要300ms-400ms左右。(如果有更好的方法,欢迎留言!)
二。主要使用技术。
1。使用递归调用。
2。使用 filter 方法用于过滤数组。