js
复制代码
[{"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"}]}]}]
js
复制代码
/**
* 删除子级数据为空的子级
* @param {[]} node
* @param {string} [childKey='children'] 子级字段 默认-children
* @returns {[]}
*/
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
}
/**
* 扁平数据转树结构
* @param {[]} flatList 扁平化树的数据
* @param {String} [idKey="id"] 主字段 默认-id
* @param {String} [parentKey="parentId"] 父级字段 默认-parentId
* @param {string} [childKey='children'] 子级字段 默认-children
* @param {boolean} [delNoneDataChildren=true] 删除子级数据为空的子级 默认-true
* @returns {[]}
*/
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))