JavaScript如何按对象相同属性将一维数组分组为二维数组
实现方案
核心逻辑是通过临时映射表按Structure_SortID字段值做分组聚合,不需要提前预知分组数量,天然覆盖所有要求的边界场景。
完整实现代码
function groupStructureArray(arr) { // 非数组/空数组直接返回空结果 if (!Array.isArray(arr) || arr.length === 0) return []; const groupCollector = {}; for (const item of arr) { const sortKey = item.Structure_SortID; // 遇到新的ID值时初始化对应分组数组 if (!groupCollector[sortKey]) { groupCollector[sortKey] = []; } groupCollector[sortKey].push(item); } // 提取所有分组得到目标二维数组,分组顺序和ID首次在原数组出现的顺序一致 return Object.values(groupCollector); } // 调用示例 const originArray = [ {"Structure_SortID": "001.001.003"}, {"Structure_SortID": "001.001.003"}, {"Structure_SortID": "001.001.003"}, {"Structure_SortID": "001.001.003"}, {"Structure_SortID": "001.004.002"}, {"Structure_SortID": "001.004.002"} ]; const groupedResult = groupStructureArray(originArray);
场景兼容说明
- 支持任意数量分组:不管原数组里有多少种不同的
Structure_SortID值,都会自动生成对应数量的子数组,不需要额外配置 - 单分组场景兼容:如果全数组只有一个ID值,会返回仅包含一个子数组的二维数组
- 边界场景处理:空数组、非数组输入、单元素数组输入都能返回符合逻辑的结果,不会抛出异常
- 顺序一致性:最终输出的分组顺序,和对应ID在原数组中第一次出现的顺序完全一致,和题目给出的预期输出顺序匹配
注:题目给出的预期输出示例中第一个子数组的注释存在笔误,注释写的是
Filtered so only 001.004.002,实际子数组内聚合的是Structure_SortID为001.001.003的元素,上述实现输出的数组结构和示例的实际内容完全一致。
内容的提问来源于stack exchange,提问作者Aquaphor
相关产品推荐
相关产品推荐

