今天看到一道题,如下图,左边的树形结构合相同节点成右边的树形结构。
我看了下可以用递归解决。代码如下:
interface ITreeIterator {
name: string;
children: any[]
}
const arr = [
{
name: '1',
children: [
{
name: '1.1',
children: [
{ name: '1.1.1', children: [] },
{ name: '1.1.1', children: [] },
]
},
{ name: '1.1', children: [] },
]
},
{
name: '1',
children: [
{ name: '1.3', children: [] },
{ name: '1.2', children: [] },
{ name: '1.2', children: [] },
]
},
{
name: '2',
children: [
{
name: '2.1',
children: [
{ name: '2.1.1', children: [] },
{ name: '2.1.1', children: [] },
]
},
{ name: '2.2', children: [] },
{ name: '2.2', children: [] },
]
}
]
function treeIterator(tree: ITreeIterator[]) {
const arr: ITreeIterator[] = [];
if (!Array.isArray(tree) || !tree.length) return arr;
tree.forEach((e: ITreeIterator) => {
const index = arr.findIndex(i => i.name == e.name)
if (index > -1) {
arr[index].children = treeIterator([...arr[index].children, ...e.children])
} else {
arr.push({ ...e, children: treeIterator(e.children) })
}
});
return arr;
}
const s = treeIterator(arr)
console.log(JSON.stringify(s))