笛卡尔乘积算法js实现

全因子实验设计( DOE) :指所有因子的所有水平的所有组合都至少进行一次实验,可以估计所有的主效应和所有的各阶交互效应。

笛卡尔乘积:指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。

输入:\[1,4,5,1,2,7,3,6]二维数组

输出:\[1,1,7,1,1,3,1,1,6, 1,2,7,1,2,3,1,2,6,4,1,7,4,1,3,4,1,6,4,2,7,4,2,3,4,2,6,5,1,7,5,1,3,5,1,6,5,2,7,5,2,3,5,2,6]

代码:

javascript 复制代码
function generateOrthogonalArray(cartesianArray) {
    if (!cartesianArray || cartesianArray.length === 0) {
        return [];
    }
    const result = [];
    const lengths = cartesianArray.map((arr) => arr.length);
    const total = lengths.reduce((acc, val) => acc * val, 1);

    for (let i = 0; i < total; i++) {
        const row = [];
        let index = i;
        for (let j = lengths.length - 1; j >= 0; j--) {
            const currentLength = lengths[j];
            const currentIndex = index % currentLength;
            row.unshift(cartesianArray[j][currentIndex]);
            index = Math.floor(index / currentLength);
        }
        result.push(row);
    }
    return result;
}
const data=[[1,4,5],[1,2],[7,3,6]];
const result = generateOrthogonalArray(data);
console.log(result);
相关推荐
lichenyang45314 分钟前
IPC、JSVM、UIThread、libuv:ASCF 架构图里最容易混的几个词
前端
用户0595401744618 分钟前
Redis记忆存储故障恢复测试踩坑实录:手动测试让我漏掉了2个一致性Bug
前端·css
用户21366100357220 分钟前
Vue2脚手架工程化与Axios集成
前端·vue.js
张元清25 分钟前
React useDebounce Hook:给状态和回调做防抖(2026)
javascript·react.js
我不是外星人27 分钟前
我把 Claude Code 搬到网页!自研高颜值 Web 交互工作台
前端·ai编程·claude
mixuecoding38 分钟前
零成本搭建全球科技热点情报站:12 个平台,6 小时,0 元
前端
用户0595401744643 分钟前
用了3年Mock,才发现Redis记忆存储的测试一直漏掉了60%的边界场景
前端·css
石小石Orz1 小时前
AI具身交互:实现一个会说话的3D虚拟伴侣
前端·人工智能·后端
Muen1 小时前
iOS设计模式-外观Facade
前端
Cobyte1 小时前
21.Vue Vapor 组件的实现原理
前端·javascript·vue.js