You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript实现对象数组多级分组:按object_id、assembly_id等分组

多层嵌套分组实现方案

你的问题核心是原transformArray仅支持单字段扁平分组,无法直接实现多层嵌套分组。下面提供两种可行的实现方式:

方案一:基于原函数的链式嵌套调用

如果希望保留原函数,可通过逐层调用的方式实现嵌套分组,每一层的分组结果作为下一层的输入:

// 原分组函数保留
transformArray(array: Array<any>, field: string) {
  if (!array) return [];
  const groupedObj = array.reduce((prev, cur) => {
    const key = String(cur[field]); // 统一转为字符串key,避免类型不一致问题
    if (!prev[key]) {
      prev[key] = [cur];
    } else {
      prev[key].push(cur);
    }
    return prev;
  }, {});
  return Object.keys(groupedObj).map(key => ({ key, value: groupedObj[key] }));
}

// 实现多层分组
const originalArray = [/* 你的对象数组 */];

// 按 object_id → assembly_id → item_id → interval 依次分组
const finalGroups = transformArray(originalArray, 'object_id').map(objectGroup => ({
  key: objectGroup.key,
  value: transformArray(objectGroup.value, 'assembly_id').map(assemblyGroup => ({
    key: assemblyGroup.key,
    value: transformArray(assemblyGroup.value, 'item_id').map(itemGroup => ({
      key: itemGroup.key,
      value: transformArray(itemGroup.value, 'interval')
    }))
  }))
}));

方案二:通用多层嵌套分组函数

更高效的方式是封装一个支持多字段递归分组的通用函数,一次性完成所有层级的分组:

// 定义嵌套分组的类型(可选,增强TypeScript类型安全)
type NestedGroup<T> = {
  key: string;
  value: T[] | NestedGroup<T>[];
};

function groupByNested<T>(array: T[], fields: Array<keyof T>): NestedGroup<T>[] {
  // 边界处理:空数组或无分组字段时返回空
  if (!array.length || !fields.length) return [];

  // 取出当前要分组的字段,剩余字段用于递归
  const [currentField, ...remainingFields] = fields;

  // 按当前字段分组
  const grouped = array.reduce((prev, cur) => {
    const key = String(cur[currentField]);
    if (!prev[key]) prev[key] = [];
    prev[key].push(cur);
    return prev;
  }, {} as Record<string, T[]>);

  // 递归处理剩余字段,生成嵌套结构
  return Object.entries(grouped).map(([key, value]) => ({
    key,
    value: remainingFields.length ? groupByNested(value, remainingFields) : value
  }));
}

// 使用方式:直接传入分组字段顺序
const finalGroups = groupByNested(originalArray, ['object_id', 'assembly_id', 'item_id', 'interval']);

方案优势

  • 通用函数支持任意数量的嵌套分组,修改字段顺序或新增分组维度只需调整传入的字段数组
  • 类型约束确保分组字段为对象的合法属性,避免拼写错误
  • 返回结构与原transformArray兼容,便于后续展示逻辑复用

内容的提问来源于stack exchange,提问作者Alif Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 15:15:27