我将使用 Lodash 来处理一维数组,将其转换为按 executeProcess
分组的二维数组结构,每个组包含 executeDept
和对应的列表。
const _ = require('lodash');/*** 将一维数组转换为按executeProcess分组的二维数组* @param {Array} arr - 原始一维数组* @returns {Array} 分组后的二维数组*/
function transformArray(arr) {// 使用Lodash的groupBy按executeProcess分组const grouped = _.groupBy(arr, 'executeProcess');// 转换为所需的二维数组格式return _.map(grouped, (items, process) => {// 取第一个元素的executeDept作为组的executeDeptconst executeDept = items[0].executeDept || '';return {executeDept: executeDept,list: items.map(item => {// 复制原始对象并移除executeProcess和executeDept,保留其他属性const { executeProcess, executeDept, ...rest } = item;return rest;})};});
}// 示例用法
const originalArray = [{ executeDept: '部门A', executeProcess: '流程1', name: '项目1' },{ executeDept: '部门A', executeProcess: '流程1', name: '项目2' },{ executeDept: '部门B', executeProcess: '流程2', name: '项目3' },{ executeDept: '部门B', executeProcess: '流程2', name: '项目4' },{ executeDept: '部门C', executeProcess: '流程3', name: '项目5' }
];const result = transformArray(originalArray);
console.log(result);
代码说明:
- 首先使用
_.groupBy
方法按executeProcess
对原始数组进行分组,将相同executeProcess
的元素归为一组。 - 然后使用
_.map
方法将分组后的对象转换为所需的格式:
- 每个组包含
executeDept
属性,取值为该组第一个元素的executeDept
- 每个组包含
list
属性,该属性是一个数组,包含该组的所有元素 - 每个元素会移除
executeProcess
和executeDept
属性,只保留其他属性
- 示例输入转换后会得到如下结果:
[{"executeDept": "部门A","list": [{"name": "项目1"}, {"name": "项目2"}]},{"executeDept": "部门B","list": [{"name": "项目3"}, {"name": "项目4"}]},{"executeDept": "部门C","list": [{"name": "项目5"}]}
]
这种处理方式确保了相同 executeProcess
的元素被合并到同一个组中,同时保留了 executeDept
信息。