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

如何将动态长度多维数组转换为拼接后的类矩阵多维数组

实现方案

你要实现的是多个数组的笛卡尔积计算,动态长度的外层数组和子数组都可以兼容,以下是可直接运行的JavaScript实现:

function cartesianProduct(arrays) {
  return arrays.reduce((acc, curr) => {
    const res = []
    acc.forEach(aItem => {
      curr.forEach(cItem => {
        res.push([...aItem, cItem])
      })
    })
    return res
  }, [[]])
}

注意:如果输入的数组中包含空的子数组,最终返回结果会是空数组,符合笛卡尔积的标准运算规则。

调用测试

用你给出的两个示例测试均可得到正确结果:

测试示例1

const a = [
  ['red', 'blue'],
  ['small', 'medium', 'large'],
]
console.log(cartesianProduct(a))
// 输出和你给出的b完全一致

测试示例2

const a = [
  ['quadcore'],
  ['4GB', '8GB'],
  ['black', 'grey'],
]
console.log(cartesianProduct(a))
// 输出和你给出的b完全一致

实现逻辑说明

  • 用reduce迭代外层的所有子数组,初始累计值设为[[]],保证首次迭代可以正确和第一个子数组的元素拼接
  • 每轮迭代时,把已有的所有组合和当前子数组的每个元素逐一拼接,生成新的组合列表
  • 迭代完全部子数组后得到的就是所有元素的全排列组合,也就是你要的类矩阵多维数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:48:03