0
点赞
收藏
分享

微信扫一扫

loadsh 对 现有一维数组 要求,把一维数组改为二维,保留 executeDept 例: {executeDept:"", list: []} ;

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

代码说明:

  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 信息。

举报

相关推荐

0 条评论