如何实现两个MySQL查询结果数组的全量对象匹配组合?
实现两个数组对象的笛卡尔积组合
你需要的是两个数组的笛卡尔积——让array_1里的每个studentID对象,和array_2里的每个pacesetterID对象逐一组合。之前用forEach没得到正确结果,大概率是嵌套循环的逻辑没写对,下面是两种可靠的实现方式:
方式一:嵌套forEach循环(基础写法)
通过两层嵌套遍历,外层处理每个学生对象,内层遍历所有领航员对象,每次合并两个对象的属性后推入结果数组:
const array_1 = [{studentID: "138"}, {studentID: "151"}]; const array_2 = [{pacesetterID: "218"}, {pacesetterID: "219"}, {pacesetterID: "221"}, {pacesetterID: "220"}, {pacesetterID: "222"}]; const result = []; // 外层遍历每个学生 array_1.forEach(student => { // 内层遍历每个领航员,和当前学生组合 array_2.forEach(pacesetter => { result.push({ ...student, ...pacesetter }); }); }); console.log(result);
方式二:ES6 flatMap + map(简洁写法)
利用flatMap扁平化嵌套数组的特性,配合map生成组合对象,一行代码完成:
const array_1 = [{studentID: "138"}, {studentID: "151"}]; const array_2 = [{pacesetterID: "218"}, {pacesetterID: "219"}, {pacesetterID: "221"}, {pacesetterID: "220"}, {pacesetterID: "222"}]; const result = array_1.flatMap(student => array_2.map(pacesetter => ({...student, ...pacesetter})) ); console.log(result);
两种方式都会生成符合你需求的结果:每个studentID都会和所有pacesetterID配对,最终数组长度是两个原数组长度的乘积(比如2*5=10个对象)。你示例结果里的{pacesetterID: "221"}应该是笔误,上述代码会自动补全对应的studentID。
内容的提问来源于stack exchange,提问作者Synaptic
相关产品推荐
相关产品推荐

