商城系统中商品规格使用笛卡尔积运算

时间:2024-05-23 07:32:53

/**
 * 笛卡尔积生成规格
 * @author   Devil
 * @blog     http://gong.gg/
 * @version  1.0.0
 * @datetime 2019-09-22T00:33:48+0800
 * @desc     description
 * @param    {[array]}                 arr1 [要进行笛卡尔积的二维数组]
 * @param    {[array]}                 arr2 [最终实现的笛卡尔积组合,可不写]
 */
function SpecCartesian(arr1, arr2)
{
    // 去除第一个元素
    var result = [];
    var temp_arr = arr1;
    var first = temp_arr.splice(0, 1);

    if((arr2 || null) == null)
    {
        arr2 = [];
    }

    // 判断是否是第一次进行拼接
    if(arr2.length > 0)
    {
        for(var i in arr2)
        {
            for(var k in first[0].value)
            {
                result.push(arr2[i]+','+first[0].value[k]);
            }
        }
    } else {
        for(var i in first[0].value)
        {
            result.push(first[0].value[i]);
        }
    }

    // 递归进行拼接
    if(arr1.length > 0)
    {
        result = SpecCartesian(arr1, result);
    }

    // 返回最终笛卡尔积
    return result;
}


// 自动生成规格
var spec = [
    {
        "title": "颜色",
        "value": ["黑色", "白色", "蓝色"]
    },
    {
        "title": "尺码",
        "value": ["S", "M", "L", "XL", "XXL"]
    },
    {
        "title": "长度",
        "value": ["5分裤", "7分裤", "9分裤", "长裤"]
    }
];
var data = SpecCartesian(spec);
console.log(data);

 

商城系统中商品规格使用笛卡尔积运算