类别:js / 日期:2023-05-10 / 浏览:583 / 评论:0
以下数据结构中,id 代表部门编号,name 是部门名称,parentId 是父部门编号,为 0 代表一级部门,现在要求实现一个 convert 方法,把原始 list 转换成树形结构,parentId 为多少就挂载在该 id 的属性 children 数组下,结构如下:
// 原始 list 如下
let list = [
{ id: 1, name: "部门 A", parentId: 0 },
{ id: 2, name: "部门 B", parentId: 0 },
{ id: 3, name: "部门 C", parentId: 1 },
{ 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 },
];
const result = convert(list);
// 转换后的结果如下
let result = [
{
id: 1,
name: "部门 A",
parentId: 0,
children: [
{
id: 3,
name: "部门 C",
parentId: 1,
children: [
{
id: 6,
name: "部门 F",
parentId: 3,
},
{
id: 16,
name: "部门 L",
parentId: 3,
},
],
},
{
id: 4,
name: "部门 D",
parentId: 1,
children: [
{
id: 8,
name: "部门 H",
parentId: 4,
},
],
},
],
},
];
答:
function convert(list) {
const res = [];
const map = list.reduce((res, v) => ((res[v.id] = v), res), {});
for (const item of list) {
if (item.parentId === 0) {
res.push(item);
Continue;
}
if (item.parentId in map) {
const parent = map[item.parentId];
parent.children = parent.children || [];
parent.children.push(item);
}
}
return res;
}
版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

发表评论 / 取消回复