我将使用 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);

代码说明:

  1. 首先使用 _.groupBy 方法按 executeProcess 对原始数组进行分组,将相同 executeProcess 的元素归为一组。
  2. 然后使用 _.map 方法将分组后的对象转换为所需的格式:
  • 每个组包含 executeDept 属性,取值为该组第一个元素的 executeDept
  • 每个组包含 list 属性,该属性是一个数组,包含该组的所有元素
  • 每个元素会移除 executeProcessexecuteDept 属性,只保留其他属性
  1. 示例输入转换后会得到如下结果:
[{"executeDept": "部门A","list": [{"name": "项目1"}, {"name": "项目2"}]},{"executeDept": "部门B","list": [{"name": "项目3"}, {"name": "项目4"}]},{"executeDept": "部门C","list": [{"name": "项目5"}]}
]

这种处理方式确保了相同 executeProcess 的元素被合并到同一个组中,同时保留了 executeDept 信息。