/**
- 使用原生JavaScript将一维数组转换为按executeProcess分组的二维数组
- @param {Array} arr - 原始一维数组
- @returns {Array} 分组后的二维数组
*/
function transformArray(arr) {
// 使用reduce进行分组
const grouped = arr.reduce((acc, item) => {
// 以executeProcess作为分组键
const key = item.executeProcess;
// 如果该分组不存在,则创建一个新分组 if (!acc[key]) { acc[key] = { executeDept: item.executeDept || '', list: [] }; }
// 将当前项添加到对应分组的list中(移除executeProcess和executeDept) const { executeProcess, executeDept, ...rest } = item; acc[key].list.push(rest);
return acc; }, {}); // 初始值为空对象
// 将对象转换为数组形式 return Object.values(grouped); }
// 示例用法 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);