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

JavaScript中实现两个数组的笛卡尔积拼接需求

没问题,这其实就是要生成两个数组的笛卡尔积——也就是把data里的每个元素和Doc里的每个元素逐一配对,然后转换成你需要的对象格式。下面给你几种实用的JavaScript实现方案:

方法一:嵌套forEach循环(直观易懂)

这种写法最直白,适合刚接触JS的开发者理解逻辑:

// 假设从服务器拿到的响应数据是这样的
const serverResponse = {
  data: [
    { id: 1 },
    { id: 2 }
  ],
  Doc: [
    { id: 10 },
    { id: 20 },
    { id: 30 },
    { id: 40 }
  ]
};

const { data, Doc } = serverResponse;
const result = [];

// 遍历每一个data元素
data.forEach(bookItem => {
  // 对每个data元素,遍历所有Doc元素
  Doc.forEach(docItem => {
    result.push({
      idlibrosiva: bookItem.id,
      iddoc: docItem.id,
      false: 1
    });
  });
});

console.log(result); // 输出包含8个元素的目标数组

方法二:flatMap + map组合(简洁函数式写法)

用数组的函数式API实现,代码更紧凑,适合喜欢函数式编程风格的场景:

const { data, Doc } = serverResponse;

const result = data.flatMap(bookItem => 
  Doc.map(docItem => ({
    idlibrosiva: bookItem.id,
    iddoc: docItem.id,
    false: 1
  }))
);

console.log(result);

这里flatMap会自动把每个bookItem对应的4个对象数组“扁平化”,最终合并成一个8元素的数组,省去了手动拼接的步骤。

方法三:reduce累加构建(灵活可控)

如果需要在构建过程中做额外的逻辑处理,用reduce会更灵活:

const { data, Doc } = serverResponse;

const result = data.reduce((accumulator, bookItem) => {
  // 生成当前bookItem对应的所有Doc配对对象
  const pairedItems = Doc.map(docItem => ({
    idlibrosiva: bookItem.id,
    iddoc: docItem.id,
    false: 1
  }));
  // 把新生成的配对对象拼接到累加器数组里
  return accumulator.concat(pairedItems);
}, []); // 初始累加器是一个空数组

console.log(result);

注意:属性名false是JavaScript的关键字,虽然作为对象属性名是合法的,但如果后续遇到语法问题,可以给它加上引号写成"false",效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:26:05