
我将使用 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作为组的executeDept
const 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 属性,取值为该组第一个元素的 executeDeptlist 属性,该属性是一个数组,包含该组的所有元素executeProcess 和 executeDept 属性,只保留其他属性这种处理方式确保了相同 executeProcess 的元素被合并到同一个组中,同时保留了 executeDept 信息。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。