You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数组元素按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:00:10