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

如何将含分组标识的JS字符串数组转换为带嵌套数组的对象

实现代码

const numberGroupArray = [
 'GROUP_A',
 'ONE',
 'TWO',
 'BREAK',
 'FOUR',
 'GROUP_B',
 'SIX',
 'GROUP_C',
 'EIGHT',
 'BREAK',
 'TEN',
 'ELEVEN',
 'GROUP_D',
 'THIRTEEN',
 'BREAK',
 'FIFTEEN',
 'BREAK',
 'SEVENTEEN',
 'EIGHTEEN',
 'NINETEEN',
];

const numberInGroup = {};
// 存储当前活跃分组名
let currentGroup = null;
// 存储当前分组正在写入的子数组
let currentSubArray = null;

numberGroupArray.forEach((item, index) => {
  // 处理分组标识
  if (item.startsWith('GROUP_')) {
    currentGroup = item;
    // 初始化分组的外层数组,以及第一个子工作数组
    numberInGroup[currentGroup] = [];
    currentSubArray = [];
    numberInGroup[currentGroup].push(currentSubArray);
    return;
  }
  // 处理拆分标识
  if (item === 'BREAK') {
    if (currentGroup) {
      // 新建子工作数组,后续下标推入新数组
      currentSubArray = [];
      numberInGroup[currentGroup].push(currentSubArray);
    }
    return;
  }
  // 普通元素写入当前子数组
  if (currentGroup && currentSubArray) {
    currentSubArray.push(index);
  }
});

执行后numberInGroup的结构和你要求的目标结构完全一致。

核心逻辑说明

  • 遍历数组时同步获取每一项的下标,作为最终存入对象的数值
  • 遇到GROUP_开头的项时,切换当前分组,为新分组初始化外层数组和第一个子工作数组
  • 遇到BREAK时,为当前分组新增一个空的子工作数组,后续普通项的下标会推入这个新数组
  • 既不是分组名也不是BREAK的普通项,直接把自身下标推入当前活跃的子工作数组
  • 额外做了边界兼容:未匹配到分组的情况下遇到BREAK或普通项会直接忽略,避免报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:39:05