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

如何实现动态循环以计算多维数组的所有元素组合和?

计算任意数量子数组的所有组合和

针对你提出的「当arrayGroup中子数组数量为N时,计算所有N元素组合的和」的需求,这里提供两种简洁可行的实现方案:

方案一:递归实现(逻辑直观)

递归的核心思路是将N个子数组的问题拆解为「第一个子数组」与「剩余N-1个子数组的所有组合和」的两两组合,逐层递归直到只剩单个子数组,再反向合并结果。

function getAllCombinationSums(arrayGroup) {
  // 终止条件:仅剩余一个子数组时,直接返回其所有元素(单个数组的组合和即自身元素)
  if (arrayGroup.length === 1) {
    return arrayGroup[0].map(num => num);
  }

  // 拆分出第一个子数组,递归处理剩余子数组
  const firstArr = arrayGroup[0];
  const restCombinationSums = getAllCombinationSums(arrayGroup.slice(1));

  // 生成所有组合和
  const result = [];
  for (const num of firstArr) {
    for (const sum of restCombinationSums) {
      result.push(num + sum);
    }
  }

  return result;
}

// 测试示例
const twoGroups = [[1,2,3],[1,2,3]];
console.log(getAllCombinationSums(twoGroups)); // 输出:[2,3,4,3,4,5,4,5,6]

const threeGroups = [[1,2,3],[1,2,3],[1,2,3]];
console.log(getAllCombinationSums(threeGroups)); // 输出所有3个子数组元素组合的和

方案二:迭代实现(基于reduce,无栈溢出风险)

使用数组的reduce方法迭代处理每个子数组,逐步累积生成所有组合和,适合处理子数组数量较多的场景(避免递归栈溢出)。

function getAllCombinationSums(arrayGroup) {
  // 初始值设为[0],第一次迭代时与第一个数组元素相加得到自身元素
  return arrayGroup.reduce((prevSums, currentArr) => {
    const newSums = [];
    for (const prevSum of prevSums) {
      for (const num of currentArr) {
        newSums.push(prevSum + num);
      }
    }
    return newSums;
  }, [0]);
}

// 测试示例
console.log(getAllCombinationSums([[1,2,3],[1,2,3]]));
console.log(getAllCombinationSums([[1,2,3],[1,2,3],[1,2,3]]));

说明

  • 两种方案均支持任意数量的子数组,且子数组长度无需固定(即使每个子数组长度不同也能正常计算)。
  • 递归方案逻辑清晰易理解,但子数组数量过多时可能触发栈溢出;迭代方案更稳定,适合大规模数据场景。

内容的提问来源于stack exchange,提问作者LebTim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:31:06