本文介绍纯 javascript 实现将字符串数字数组按每3个元素为一组进行数值求和,并返回由各组和组成的新字符串数组,不依赖任何外部库,适用于进制转换等场景。
本文介绍纯 javascript 实现将字符串数字数组按每3个元素为一组进行数值求和,并返回由各组和组成的新字符串数组,不依赖任何外部库,适用于进制转换等场景。
在实际开发中,尤其是实现进制转换(如十六进制转八进制)时,常需将数字序列按固定长度分组处理。例如,将 ["1", "2", "0", "1", "3", "4"] 按每3个元素一组求和,得到 ["3", "8"](即 "1"+"2"+"0" = 3,"1"+"3"+"4" = 8)。注意:末尾不足3个元素时也应单独求和(如 ["1","2","0","1"] → ["3","1"]),而非忽略。
以下是一个健壮、可复用的原生 JavaScript 解决方案:
function sumInGroupsOfThree(arr) {
const result = [];
for (let i = 0; i < arr.length; i += 3) {
const group = arr.slice(i, i + 3); // 取当前组(自动处理边界)
const sum = group.reduce((acc, val) => acc + Number(val), 0);
result.push(String(sum));
}
return result;
}
// 示例使用
console.log(sumInGroupsOfThree(["1", "2", "0", "1"])); // ["3", "1"]
console.log(sumInGroupsOfThree(["0", "1", "2", "1", "3", "4"])); // ["3", "8"]
console.log(sumInGroupsOfThree(["5", "5", "5", "2", "1"])); // ["15", "3"]✅ 关键说明:
- 使用 for 循环配合 i += 3 确保分组逻辑清晰可控;
- arr.slice(i, i + 3) 安全截取子数组,即使 i + 3 > arr.length 也不会报错;
- reduce 初始化累加器为 0(数值),避免字符串隐式拼接;
- 最终统一转为字符串 String(sum),保持输出格式与输入一致(如用于后续进制转换流程)。
⚠️ 注意事项:
- 输入数组元素必须为可被 Number() 正确解析的字符串(如 "0"–"9"),若含非数字字符需预先校验;
- 该方法时间复杂度为 O(n),空间复杂度为 O(n/3),高效且无副作用;
- 不推荐仅用一次 reduce + slice(如答案中示例)来处理首组+剩余,因其无法扩展至任意长度数组——它只合并了前3项与后续项,未实现真正的“每3个一组”遍历。
此模式是构建自定义进制转换器(如 base-16 → base-8 的中间分组加权步骤)的理想基础逻辑。

















