
本文介绍如何将已排序数组中连续重复的字符串元素拼接成单一数字,适用于如 ['1','1','2','2','2'] → [11, 222] 的场景,提供可复用函数、边界处理说明及实际应用注意事项。
本文介绍如何将已排序数组中连续重复的字符串元素拼接成单一数字,适用于如 ['1','1','2','2','2'] → [11, 222] 的场景,提供可复用函数、边界处理说明及实际应用注意事项。
在 JavaScript 中,若需将已排序且相邻重复的字符串数组(如 ['1', '1', '2', '2', '2'])按组合并为拼接后的整数(如 [11, 222]),核心思路是遍历数组,累积相同连续元素,遇变化或末尾时结束当前组并转换为数字。该方案不依赖外部库,仅用原生语法,高效且易理解。
✅ 基础实现逻辑
关键在于识别“连续相同段”的边界:当当前元素与下一个元素不同,或当前已是最后一个元素时,即为一段结束点。示例代码如下:
function groupAndConcatenate(arr) {
if (!Array.isArray(arr) || arr.length === 0) return [];
const result = [];
let currentSegment = '';
for (let i = 0; i < arr.length; i++) {
currentSegment += arr[i];
// 判断是否到达当前分组末尾:i 是最后一项,或下一项与当前不同
if (i === arr.length - 1 || arr[i] !== arr[i + 1]) {
// 转为数字(自动去除前导零;若需保留字符串形式,改用 currentSegment 即可)
result.push(parseInt(currentSegment, 10));
currentSegment = ''; // 重置,准备下一组
}
}
return result;
}? 使用示例
const arr1 = ['1', '1', '2', '2', '2'];
const arr2 = ['10', '10', '10', '10', '34', '34', '34', '34', '34', '34', '92', '92'];
console.log(groupAndConcatenate(arr1)); // [11, 222]
console.log(groupAndConcatenate(arr2)); // [10101010, 343434343434, 9292]
// 合并输出为指定格式字符串(如题目要求)
const res1 = groupAndConcatenate(arr1);
const res2 = groupAndConcatenate(arr2);
console.log(`[${res1.join(', ')}] [${res2.join(', ')}]`);
// 输出:[11, 222] [10101010, 343434343434, 9292]⚠️ 注意事项与最佳实践
- 前提条件:此方法严格要求输入数组已按值排序且相同元素连续。若数组无序(如 ['2','1','1','2']),结果将错误。必要时请先调用 arr.sort()(注意字符串排序需自定义比较器避免 '10' < '2' 类问题)。
- 类型安全:parseInt() 会将 '007' 转为 7。若需保留原始字符串拼接结果(如 '007007'),请直接 push(currentSegment) 并跳过解析。
- 空/非法输入防护:函数开头已加入基础校验,生产环境建议进一步校验元素是否全为有效数字字符串(可用正则 /^\d+$/ 验证)。
- 性能考量:时间复杂度 O(n),空间复杂度 O(n),适合大规模数据;避免在循环内频繁字符串拼接(现代 JS 引擎已优化,但极端场景可用 Array.push() + join('') 替代)。
该方案简洁、健壮、可扩展——你可轻松将其封装为工具函数集成至项目 utils 库中,支持多种业务场景下的分组聚合需求。


















