前端面试题 - 9. 数组转树

136 阅读1分钟
type Item = {
	[key: string]: any
}

const foo = (list: Item[]) => {
	const map: Record<string, Item> = {}
	const treeList: Item[] = []

	list.forEach(item => {
		if(!item.children) item.children = [];
		map[item.id] = item
	});

	list.forEach(item => {
		const parent = map[item.parentId];
		if(parent) {
			parent.children.push(item);
		} else {
			treeList.push(item);
		}
	});

	return treeList;
}

const arr = [
	{
		id: 2,
		name: '部门B',
		parentId: 0
	},
	{
		id: 3,
		name: '部门C',
		parentId: 1
	},
	{
		id: 1,
		name: '部门A',
		parentId: 2
	},
	{
		id: 4,
		name: '部门D',
		parentId: 1
	},
	{
		id: 5,
		name: '部门E',
		parentId: 2
	},
	{
		id: 6,
		name: '部门F',
		parentId: 3
	},
	{
		id: 7,
		name: '部门G',
		parentId: 2
	},
	{
		id: 8,
		name: '部门H',
		parentId: 4
	}
]

console.log(foo(arr))

export default foo