You need to enable JavaScript to run this app. JavaScript 如何按数组元素冒号后内容实现字符串数组排序与分组
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript 如何按数组元素冒号后内容实现字符串数组排序与分组

实现方案说明

核心规则对齐

  • 数组头部固定元素Severity、Name保持原位置,不参与排序
  • 数组尾部固定元素Alarms、Advisories、__row_index保持原位置,不参与排序
  • 中间段所有带冒号的业务元素,严格按照冒号拆分后的后半段内容做分组归集,相同后半段的元素必须相邻排列,不得穿插其他分组内容
  • 分组顺序、组内元素顺序完全匹配原始输入中的出现先后,不做额外自定义排序

分步落地逻辑

  1. 拆分原数组为三个独立部分,避免固定元素被排序流程影响:
    • 头部段:截取原数组前2个元素,为固定保留内容
    • 尾部段:截取原数组最后3个元素,为固定保留内容
    • 待排序中间段:去掉头、尾部分后,剩余的所有带冒号的业务元素
  2. 对中间段元素做分组映射:
    • 遍历每个中间段元素,定位元素中第一个冒号的位置,截取冒号后面的所有内容(去掉首尾空格)作为分组的唯一标识
    • 用有序Map容器存储分组,Map的原生特性就是会保留key第一次插入的顺序,刚好匹配组排序的需求
    • 把当前元素追加到对应分组的数组末尾,保留原出现顺序作为组内排序依据
  3. 拼接最终结果:按「头部段 → 所有分组按顺序摊平的中间段 → 尾部段」的顺序拼接,就是符合要求的输出数组

可直接复用的代码示例

function groupAndSortByColonSuffix(originalArray) {
  // 拆分固定的头尾段
  const header = originalArray.slice(0, 2);
  const footer = originalArray.slice(-3);
  const middleItems = originalArray.slice(2, -3);

  // 用有序Map做分组容器,自动保留key的首次出现顺序
  const groupContainer = new Map();
  middleItems.forEach(item => {
    // 定位第一个冒号的位置,避免内容本身带冒号导致拆分错误
    const firstColonPos = item.indexOf(':');
    // 提取冒号后的内容作为分组key,去掉前后冗余空格
    const groupKey = item.slice(firstColonPos + 1).trim();
    
    if (!groupContainer.has(groupKey)) {
      groupContainer.set(groupKey, []);
    }
    groupContainer.get(groupKey).push(item);
  });

  // 把所有分组内容摊平为排序好的中间段
  const sortedMiddle = Array.from(groupContainer.values()).flat();

  // 拼接最终完整数组
  return [...header, ...sortedMiddle, ...footer];
}

效果校验点

  • 固定头尾元素位置完全不变,不会被排序流程挪动
  • 相同分组key的元素完全相邻,无跨组穿插
  • 分组顺序、组内元素顺序与示例期望输出完全匹配
  • 拆分逻辑兼容内容本身带冒号的场景(以第一个冒号为拆分点,不会拆分错误)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 19:27:03