ArrToTree--数组转树

511 阅读1分钟

数组转树的递归实现:

let data = [
  { id: 1, name: '部门1', pid: 0 },
  { id: 2, name: '部门2', pid: 1 },
  { id: 3, name: '部门3', pid: 1 },
  { id: 4, name: '部门4', pid: 3 },
  { id: 5, name: '部门5', pid: 4 }
]
/*data 初始数组, result = [], pid 父id*/
 const getChildren = (data, result, pid) => {
  data.forEach(item => {
    if (item.pid == pid) {
      const children = { ...item, children: [] }
      result.push(children)
      getChildren(data, children.children, item.id)
    }
  })
}
const arrayToTree = (arr, pid) => {
  const result = []
  getChildren(arr, result, pid)
  return result
}
let result = arrayToTree(data, 0)

结果:

[{
	"id": 1,
	"name": "部门1",
	"pid": 0,
	"children": [{
		"id": 2,
		"name": "部门2",
		"pid": 1,
		"children": []
	}, {
		"id": 3,
		"name": "部门3",
		"pid": 1,
		"children": [{
			"id": 4,
			"name": "部门4",
			"pid": 3,
			"children": [{
				"id": 5,
				"name": "部门5",
				"pid": 4,
				"children": []
			}]
		}]
	}]
}]