const list = [
{ id: 1, pid: null, name: 'M1部门' },
{ id: 12, pid: 1, name: '李四' },
{ id: 13, pid: 1, name: '王五' },
{ id: 2, pid: null, name: 'M2部门' },
{ id: 21, pid: 1, name: '赵六' },
{ id: 22, pid: 1, name: '周七' },
{ id: 23, pid: 2, name: '吴八' },
{ id: 11, pid: 1, name: '张三' },
{id:6, pid: 11, name: '钱多多'}
]
function transformTree(
list = [],
options = {
keyField: 'id',
childField: 'children',
parentField: 'pid',
},
) {
const { keyField, childField, parentField } = options;
const tree = [];
const record = {};
for (let i = 0, len = list.length; i < len; i++) {
const item = list[i];
const id = item[keyField];
if (!id) {
continue;
}
if (record[id]) {
item[childField] = record[id];
} else {
item[childField] = record[id] = [];
}
if (item[parentField]) {
const parentId = item[parentField];
if (!record[parentId]) {
record[parentId] = [];
}
record[parentId].push(item);
} else {
tree.push(item);
}
}
return tree;
}
console.log(transformTree(list))