之前做了一个图层选择的一个功能,改功能拿到的数据是一个一维的数组对象形式,需要使用树形控件,因此需要把扁平化的数组转为树状结构,特记录下方法为以后方便
function arrayToTree(array) {
const map = {};
const roots = [];
array.forEach(item => {
map[item.id] = { ...item, children: [] };
});
array.forEach(item => {
if (item.parentId !== null) {
map[item.parentId].children.push(map[item.id]);
} else {
roots.push(map[item.id]);
}
});
return roots;
}
使用
// 示例用法
const Array = [
{ id: 1, name: 'Node 1', parentId: null },
{ id: 2, name: 'Node 1.1', parentId: 1 },
{ id: 3, name: 'Node 1.2', parentId: 1 },
{ id: 4, name: 'Node 1.2.1', parentId: 3 },
{ id: 5, name: 'Node 2', parentId: null },
{ id: 6, name: 'Node 2.1', parentId: 5 }
];
const tree = arrayToTree(Array);