
本文介绍如何将已排序数组中连续重复的字符串元素拼接成单个数字,适用于如 ['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 currentGroup = '';
for (let i = 0; i <p>✅ <strong>使用示例:</strong></p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill5980" title="javascript-pro"><img
src="https://img.php.cn/upload/skill/000/000/081/179074807567238.jpg" alt="javascript-pro" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill5980" title="javascript-pro" class="overflowclass">javascript-pro</a>
<p class="overflowclass">专注现代 ECMAScript、异步编程、性能优化和全栈的 JavaScript 专家,适用于现代开发</p>
</div>
<a rel="nofollow" href="/xiazai/skill5980" title="javascript-pro" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><pre class="brush:php;toolbar:false;">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'],结果将是 [2, 11, 2],而非 [11, 22]。
- ✅ 使用 Number() 而非 parseInt(),避免 parseInt('08') 等意外八进制解析问题;所有输入应为有效数字字符串。
- ✅ 空数组或非数组输入已做防御性校验,返回空数组,提升鲁棒性。
- ❌ 不适用场景:需跨位置聚合(如去重后合并所有 '1')、或需保留原始顺序但元素不连续的情况——此时应先用 reduce + Map 或 Object.groupBy(ES2024)预分组。
该方法时间复杂度为 O(n),空间复杂度为 O(n),简洁高效,适合前端数据预处理、日志聚合、编码压缩等实际业务场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










