扁平数据

转为最终效果

[{"label":"疼逊有限公司","code":"1212","disabled":false,"parentId":"none","children":[{"label":"财务部","code":"34343","disabled":false,"parentId":"1212"},{"label":"人事部","code":"43434","disabled":false,"parentId":"1212"},{"label":"经营 部","code":"53543","disabled":false,"parentId":"1212","children":[{"label":"市场部","code":"23232","disabled":true,"parentId":"53543"},{"label":"销售部","code":"3435435","disabled":false,"parentId":"53543"}]}]}]
码
const removeNoneDataChildren = (node, childKey = 'children') => {const remove = nodeItem => {if (nodeItem[childKey] && nodeItem[childKey].length === 0) {delete nodeItem[childKey];} else if (nodeItem[childKey]) {nodeItem[childKey].forEach(remove);}}node.forEach(remove);return node
}
const buildTree = (flatList, idKey = 'id', parentKey = 'parentId', childKey = 'children', delNoneDataChildren = true) => {const map = {};const roots = [];flatList.forEach(item => {map[item[idKey]] = { ...item, [childKey]: [] };});flatList.forEach(item => {const itemId = item[idKey];const parentId = item[parentKey];if (parentId !== null && map[parentId]) {map[parentId][childKey].push(map[itemId]);} else {roots.push(map[itemId]);}});if (delNoneDataChildren) return removeNoneDataChildren(roots, childKey);return roots;
}
const test =[{label:'疼逊有限公司',code:'1212',disabled:false,parentId:'none'},{label:'财务部',code:'34343',disabled:false,parentId:'1212'},{label:'人事部',code:'43434',disabled:false,parentId:'1212'},{label:'经营部',code:'53543',disabled:false,parentId:'1212'},{label:'市场部',code:'23232',disabled:true,parentId:'53543'},{label:'销售部',code:'3435435',disabled:false,parentId:'53543'}];
const tree = buildTree(test, 'code', 'parentId', 'children');
console.log("1 ~ tree:", JSON.stringify(tree))