如何将数组元素按3个一组求和并返回新数组?(十六进制转八进制场景)
实现数组按3个一组求和的原生JS方案
直接用原生JavaScript的循环、slice()和reduce()就能完成需求,不需要第三方库,具体实现如下:
核心代码实现
function groupSum(arr) { const result = []; // 每次步进3个元素遍历数组 for (let i = 0; i < arr.length; i += 3) { // 截取当前组的元素(不足3个时自动取到数组末尾) const currentGroup = arr.slice(i, i + 3); // 将组内字符串转数字并求和 const sum = currentGroup.reduce((total, numStr) => { return total + Number(numStr); }, 0); // 把求和结果转回字符串存入结果数组 result.push(sum.toString()); } return result; } // 测试示例 const testArray = ["1", "2", "0", "1"]; console.log(groupSum(testArray)); // 输出: ["3", "1"]
代码说明
slice(i, i+3):从原数组中截取从索引i到i+3的子数组,当剩余元素不足3个时,会自动截取到数组末尾,完美处理分组剩余的元素。reduce():用来累加组内的数值,初始值设为0确保累加逻辑稳定,即使遇到空组(实际场景中不会出现)也不会出错。Number(numStr):将字符串形式的数字转为数值类型,求和后再用toString()转回字符串,符合你需要的输出格式。
适配十六进制字符的扩展(针对你的转换器场景)
如果你的数组元素包含十六进制的字母(如"A"、"F"),可以先把这些字符转为对应的十进制数值,再进行求和:
// 十六进制字符转十进制数字 function hexToDecimal(char) { const lowerChar = char.toLowerCase(); if (/[0-9]/.test(lowerChar)) { return Number(lowerChar); } // 处理A-F的情况,A对应10,B对应11...F对应15 return 10 + (lowerChar.charCodeAt(0) - 'a'.charCodeAt(0)); } // 修改后的分组求和函数 function hexGroupSum(arr) { const result = []; for (let i = 0; i < arr.length; i += 3) { const currentGroup = arr.slice(i, i + 3); const sum = currentGroup.reduce((total, hexChar) => { return total + hexToDecimal(hexChar); }, 0); result.push(sum.toString()); } return result; } // 测试十六进制场景 const hexTestArray = ["A", "3", "F", "2"]; console.log(hexGroupSum(hexTestArray)); // 输出: ["28", "2"]
内容的提问来源于stack exchange,提问作者gamer_sans987
相关产品推荐
相关产品推荐

