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

如何将两个整数数组双向笛卡尔积转换为嵌套对象?

实现双向笛卡尔积到嵌套对象的转换

嘿,我懂你想要做的事儿——把两个整数数组的双向笛卡尔积转换成嵌套对象结构,对吧?其实这不算严格意义上的排列问题,就是基于笛卡尔积的双向映射构建,用数组的原生方法完全能搞定,forEach和reduce组合起来就很顺手。

思路拆解

  • 最终的结果对象需要包含两个方向的映射:一个是数组a的元素对应数组b的所有元素(也就是你示例里的firstWay),另一个是数组b的元素对应数组a的所有元素(咱们叫它secondWay)
  • 对于每个方向的映射,咱们可以用forEach遍历外层数组的每个元素,再用reduce来构建内层的键值对对象,把对应数组的元素都设为键,值统一用true

完整实现代码

const a = [1, 2, 3];
const b = [4, 5, 6];

function doCartesian(a, b) {
  // 初始化结果容器,包含两个方向的映射入口
  const result = {
    firstWay: {},
    secondWay: {}
  };

  // 构建a -> b的映射:a的每个元素对应b的所有元素
  a.forEach(numA => {
    result.firstWay[numA] = b.reduce((innerObj, numB) => {
      innerObj[numB] = true;
      return innerObj;
    }, {});
  });

  // 构建b -> a的映射:b的每个元素对应a的所有元素
  b.forEach(numB => {
    result.secondWay[numB] = a.reduce((innerObj, numA) => {
      innerObj[numA] = true;
      return innerObj;
    }, {});
  });

  return result;
}

// 输出结果
console.log(doCartesian(a, b));

代码说明

  • forEach负责遍历外层数组的每一个元素,为每个元素创建对应的嵌套对象入口
  • reduce的作用是把内层数组的元素逐个添加到空对象中,最终形成{ 4: true, 5: true, 6: true }这样的结构
  • 如果你只需要单向的映射(比如只保留firstWay),直接删掉secondWay相关的代码块就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:30:02