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
相关产品推荐
相关产品推荐

