面试一脸懵:listToTree

47 阅读1分钟
const tree = [
  {id: -1,parentId: null},
  {id: 0,parentId: -1},
  {id: 1,parentId: -1},
  {id: 2,parentId: -1},
  {id: 3, parentId: 2},
  {id: 4, parentId: 3},
]
转化为
[{"id":-1,"children":[{"id":0},{"id":1},{"id":2,"children":[{"id":3,"children":[{"id":4}]}]}]}]
function listToTree(list){
	let map = new Map()
	list.forEach(item=>{
		if(!map.has(item.parentId)){
			map.set(item.parentId, [])
		}
		map.get(item.parentId).push(item)
	})	
	function rev(root){
		return map.get(root).map(item=>{
			if(map.has(item.id)){
				item.children = rev(item.id)
			}
			delete item.parentId
			return item
		})
	}
	return rev(null)
}