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

JavaScript数组元素逗号后内容移位、格式化及排序实现方法

JavaScript 时间字符串数组通用处理方案

实现逻辑

整个处理流程分三个核心步骤,覆盖所有提到的业务场景:

  • 合规预校验:遍历数组所有元素,若全部元素都符合「无逗号纯时间前缀」或「时间前缀+逗号+时段后缀」的规范格式,直接返回原数组不做修改
  • 元素移位:从数组头部开始遍历,遇到包含逗号的元素时,按逗号拆分内容,逗号前的时间部分保留在当前索引位,逗号后的时段部分拼接逗号后下沉到下一个索引位的最前端
  • 格式标准化:移位完成后,再次遍历所有包含逗号的元素,按逗号拆分两段内容,识别时间前缀和时段后缀,调整为「时间前缀,时段后缀」的标准结构,自动去除内容前后多余空格

完整实现代码

function processTimeArray(arr) {
  // 正则定义:匹配时间前缀、时段后缀、标准带后缀格式
  const timePrefixReg = /^\d{1,2}-\d{1,2}[-:]\d{2}:\d{2}$/;
  const timeSuffixReg = /^\d{2}:\d{2}-\d{2}:\d{2}$/;
  const standardItemReg = /^(\d{1,2}-\d{1,2}[-:]\d{2}:\d{2}),(\d{2}:\d{2}-\d{2}:\d{2})$/;

  // 第一步:合规校验,全量符合规范直接返回副本
  const isAllStandard = arr.every(item => {
    const trimmed = item.trim();
    if (!trimmed.includes(',')) return timePrefixReg.test(trimmed);
    return standardItemReg.test(trimmed);
  });
  if (isAllStandard) return [...arr];

  // 第二步:执行元素移位,基于数组副本操作避免修改原数据
  const processed = [...arr];
  // 遍历到倒数第二位即可,最后一位无后续索引承接下沉内容
  for (let i = 0; i < processed.length - 1; i++) {
    const current = processed[i];
    if (!current.includes(',')) continue;
    const [partA, partB] = current.split(',');
    const trimmedPartB = partB.trim();
    // 当前索引位保留逗号前的时间内容
    processed[i] = partA.trim();
    // 时段部分下沉拼接到下一位的开头
    processed[i+1] = `${trimmedPartB},${processed[i+1]}`;
  }

  // 第三步:标准化所有带逗号元素的内容顺序
  for (let i = 0; i < processed.length; i++) {
    const item = processed[i];
    if (!item.includes(',')) {
      processed[i] = item.trim();
      continue;
    }
    const [seg1, seg2] = item.split(',').map(s => s.trim());
    // 识别前后段类型,调整为标准顺序
    if (timePrefixReg.test(seg1) && timeSuffixReg.test(seg2)) {
      processed[i] = `${seg1},${seg2}`;
    } else if (timePrefixReg.test(seg2) && timeSuffixReg.test(seg1)) {
      processed[i] = `${seg2},${seg1}`;
    }
  }

  return processed;
}

用法测试

// 测试初始待处理数据
let data1 = [
"10-45-23:45", 
"10-45-22:45",
"10-45-20:45",
"10-45-23:45",
"10-45-23:59,00:00-04:59", 
"10-45-23:59, 00:00-04:59",
"10-45:22:45"
];
console.log(processTimeArray(data1));
// 输出结果与需求给出的最终规范结果完全一致

// 测试已合规的数据
let data2 = [
 "10-45-23:59,00:00-01:59",
 "10-45:22:59,00:00-02:59",
 "10-45-23:59,00:00-04:59",
 "10-45:22:59,00:00-04:59",
 "10-45-23:59,00:00-04:59",
 "10-45:22:59,00:00-04:59",
 "10-45-23:59,00:00-04:59",
 "10-45:22:59,00:00-04:59"
];
console.log(processTimeArray(data2));
// 直接返回原数组内容,不做任何修改

补充说明

  • 实现自动处理逗号前后的多余空格问题,比如示例中"10-45-23:59, 00:00-04:59"逗号后的空格会被自动清除
  • 所有操作都在数组副本上执行,不会修改原始输入数组
  • 正则匹配规则可以根据实际时间格式扩展,当前规则完全覆盖给出的所有样例格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:45:32