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
相关产品推荐
相关产品推荐

