2023-08-31 js 笛卡尔积之商品规格组合

发布时间 2023-08-31 11:02:31作者: 哎呦你可棒棒了

假设我们的商品规格数据为:

    let arr = [
        {
            name: '材质',
            value: ['花岗岩','玄武岩'],
        },
        {
            name: '体积',
            value: ['10克'],
        },
        {
            name: '颜色',
            value: ['白色'],
        },
    ];

我们想要的最终数据:

[['花岗岩', '10克', '白色'],['玄武岩', '10克', '白色']]

实现代码:

function combineSpecs(specs) {
        if (specs.length === 0) {
            return [
                []
            ];
        } else {
            const [head, ...tail] = specs;
            const rest = this.combineSpecs(tail);
            const pairs = head.value.map(value => rest.map(r => [value, ...r]));
            return [].concat(...pairs);
        }
    };

    let arr = [
        {
            name: '材质',
            value: ['花岗岩','玄武岩'],
        },
        {
            name: '体积',
            value: ['10克'],
        },
        {
            name: '颜色',
            value: ['白色'],
        },
    ];

    let arr2 = this.combineSpecs(arr);
    console.log('最终结果',arr2);

关键就是这个combineSpecs函数,它把数组里面的所有值进行了组合,才得出我们想要的结果。

注:本文参考于http://t.csdn.cn/icq72