var data = [
{ path: "0001", id: 1, text: "北京" },
{ path: "00010001", id: 2, text: "朝阳", parentId: 1 },
{ path: "00010002", id: 3, text: "海淀", parentId: 1 },
{ path: "00010003", id: 4, text: "西单", parentId: 1 },
{ path: "000100010001", id: 5, text: "朝阳子1", parentId: 2 },
{ path: "000100010002", id: 6, text: "朝阳子2", parentId: 2 },
{ path: "000100010003", id: 7, text: "朝阳子3", parentId: 2 },
{ path: "000100020001", id: 8, text: "海淀子1", parentId: 3 },
{ path: "000100020002", id: 9, text: "海淀子2", parentId: 3 },
];
第一种
function toTree(data, pid) {
let value = [];
data.forEach((item) => {
if (item.parentId == pid) {
const result=toTree(data,item.id)
if(result) item.children=result
value.push(item)
}
});
return value
}
第二种
function toTree(data, id = "id", pid = "pid", children = "children") {
const result = [];
const map = {};
if (!Array.isArray(data)) {
return [];
}
data.forEach((item) => {
map[item[id]] = item;
});
data.forEach((item) => {
const parent = map[item[pid]];
if (parent) {
(parent[children] || (parent[children] = [])).push(item);
} else {
result.push(item);
}
});
return result;
}