listToTree.js 936 B

1234567891011121314151617181920212223242526272829303132333435
  1. //将后端返回的list数据转化为树结构
  2. export const listToTree = (list) => {
  3. var arr = []
  4. let items = {}
  5. var idsStr = ''
  6. // 获取每个节点的直属子节点(是直属,不是所有子节点)
  7. for (let i = 0; i < list.length; i++) {
  8. let key = list[i].parentId
  9. if (items[key]) {
  10. items[key].push(list[i])
  11. } else {
  12. items[key] = []
  13. items[key].push(list[i])
  14. }
  15. idsStr += idsStr === '' ? list[i].id : ',' + list[i].id
  16. }
  17. for (var key in items) {
  18. if (idsStr.indexOf(key) === -1) {//找到最大的父节点key
  19. arr=formatTree(items, key)
  20. }
  21. }
  22. delete arr[0].parentId
  23. return arr
  24. }
  25. function formatTree(items, parentId) {
  26. let result = []
  27. if (!items[parentId]) {
  28. return result
  29. }
  30. for (let t of items[parentId]) {
  31. t.children = formatTree(items, t.id)//递归获取children
  32. result.push(t)
  33. }
  34. return result
  35. }