UNPKG

util-helpers

Version:

一个基于业务场景的工具方法库

43 lines (42 loc) 2.75 kB
type NodeAssign = 'spread' | 'self'; type Options = { keyField?: string; parentField?: string; childrenField?: string; emptyChildrenValue?: 'none' | 'null' | 'array'; nodeAssign?: NodeAssign; }; /** * 列表数据转树结构 * * @alias module:Tree.listToTree * @since 4.14.0 * @param {Object[]} list 列表数据 * @param {Object} [options] 配置项 * @param {string} [options.keyField='id'] 当前数据的键值字段名称,默认`id` * @param {string} [options.parentField='pid'] 当前数据的父级字段名称,默认`pid` * @param {string} [options.childrenField='children'] 子级字段名称,默认`children` * @param {'none'|'null'|'array'} [options.emptyChildrenValue='none'] 子级为空时的值,默认`none`。`none`表示删除该子级,`null`表示为`null`,`array`表示为`[]`。 * @param {'spread'|'self'} [options.nodeAssign='spread'] 节点赋值方式,默认`spread`。`spread`表示使用展开运算符创建新值,`self`表示使用自身对象。 * @returns {Object[]} 树结构 * @example * * const menus = [ * { id: '1', name: '首页', code: 'trade', pid: null }, * { id: '2', name: '交易管理', code: 'trade', pid: null }, * { id: '3', name: '交易查询', code: 'trade-1', pid: '2' }, * { id: '4', name: '交易查询-查询操作', code: 'trade-1-1', pid: '3' }, * { id: '5', name: '权限管理', code: 'authorization', pid: null }, * { id: '6', name: '角色管理', code: 'authorization-1', pid: '5' }, * { id: '7', name: '用户管理', code: 'authorization-2', pid: '5' } * ]; * listToTree(menus); * // [{id:'1',name:'首页',code:'trade',pid:null},{id:'2',name:'交易管理',code:'trade',pid:null,children:[{id:'3',name:'交易查询',code:'trade-1',pid:'2',children:[{id:'4',name:'交易查询-查询操作',code:'trade-1-1',pid:'3'}]}]},{id:'5',name:'权限管理',code:'authorization',pid:null,children:[{id:'6',name:'角色管理',code:'authorization-1',pid:'5'},{id:'7',name:'用户管理',code:'authorization-2',pid:'5'}]}] * * // 自定义子级字段名 * listToTree(basicMenus, { childrenField: 'childs' }); * // [{id:'1',name:'首页',code:'trade',pid:null},{id:'2',name:'交易管理',code:'trade',pid:null,childs:[{id:'3',name:'交易查询',code:'trade-1',pid:'2',childs:[{id:'4',name:'交易查询-查询操作',code:'trade-1-1',pid:'3'}]}]},{id:'5',name:'权限管理',code:'authorization',pid:null,childs:[{id:'6',name:'角色管理',code:'authorization-1',pid:'5'},{id:'7',name:'用户管理',code:'authorization-2',pid:'5'}]}] * */ declare function listToTree<T extends Record<string, any> = Record<string, any>, R = T & Record<string, any>>(list: T[], options?: Options): R[]; export default listToTree;