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

如何实现任意数量数组的笛卡尔积生成?(JavaScript场景)

实现任意数组的笛卡尔积生成函数

要生成任意数量数组的所有元素组合(笛卡尔积),可以用递归或数组reduce两种方式实现,以下是具体代码:

递归实现

递归方式逻辑直观,适合理解笛卡尔积的生成过程:

function magicfunction(arrays) {
  // 空输入直接返回空数组
  if (arrays.length === 0) return [];
  // 只剩一个数组时,将每个元素转为单元素数组返回
  if (arrays.length === 1) return arrays[0].map(item => [item]);

  // 拆分第一个数组和剩余数组
  const first = arrays[0];
  const restProducts = magicfunction(arrays.slice(1));

  // 组合第一个数组的每个元素与剩余数组的笛卡尔积结果
  return first.flatMap(item => restProducts.map(product => [item, ...product]));
}

迭代实现(reduce方式)

用数组reduce方法可以写出更简洁的代码,核心是逐步累积笛卡尔积结果:

function magicfunction(arrays) {
  return arrays.reduce((accumulator, currentArray) => {
    // 将累积的结果与当前数组的每个元素组合,再展开为一维数组
    return accumulator.flatMap(prevCombination => 
      currentArray.map(item => [...prevCombination, item])
    );
  }, [[]]); // 初始值设为包含空数组的数组,作为组合的起点
}

测试示例

用你提供的数组测试:

let array1 = ["lion","tiger","bear"];
let array2 = ["cat","dog","snake"];
let array3 = ["cockroach","spider","slug"];

console.log(magicfunction([array1,array2,array3]));

输出会符合你期望的格式,包含所有3×3×3=27种元素组合。

这两种实现都支持任意数量的输入数组,不管是2个、3个还是更多,完全满足你提前生成查询列表的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:39:47