js实现的笛卡尔乘积-商品发布

Posted Yuri 前端什么狮子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js实现的笛卡尔乘积-商品发布相关的知识,希望对你有一定的参考价值。

//笛卡儿积组合
function descartes(list)
{
    //parent上一级索引;count指针计数
    var point  = {};
 
    var result = [];
    var pIndex = null;
    var tempCount = 0;
    var temp   = [];
 
    //根据参数列生成指针对象
    for(var index in list)
    {
        if(typeof list[index] == ‘object‘)
        {
            point[index] = {‘parent‘:pIndex,‘count‘:0}
            pIndex = index;
        }
    }
 
    //单维度数据结构直接返回
    if(pIndex == null)
    {
        return list;
    }
 
    //动态生成笛卡尔积
    while(true)
    {
        for(var index in list)
        {
            tempCount = point[index][‘count‘];
            temp.push(list[index][tempCount]);
        }
 
        //压入结果数组
        result.push(temp);
        temp = [];
 
        //检查指针最大值问题
        while(true)
        {
            if(point[index][‘count‘]+1 >= list[index].length)
            {
                point[index][‘count‘] = 0;
                pIndex = point[index][‘parent‘];
                if(pIndex == null)
                {
                    return result;
                }
 
                //赋值parent进行再次检查
                index = pIndex;
            }
            else
            {
                point[index][‘count‘]++;
                break;
            }
        }
    }
}
//该代码片段来自于: http://www.sharejs.com/codes/javascript/7013




var aa=[1,2,3],bb=[1,2,3],cc=[1,2,3],dd=[1,2,3];
var zz=[aa,bb,cc,dd];//此处数组个数任意
var selectSpec = [ [‘16G‘,‘64G‘,‘128G‘] , [‘土豪金‘,‘银色‘,‘黑色‘,‘pink‘],[‘联通3G存费送餐‘,‘联通4G存费送餐‘,‘联通2G存费送餐‘], [‘76元套餐‘,‘106元套餐‘,‘206元套餐‘]];
 

var result=descartes(selectSpec);
console.log(result);
document.write(result);

 

以上是关于js实现的笛卡尔乘积-商品发布的主要内容,如果未能解决你的问题,请参考以下文章

mysql连表查询

数据库:笛卡尔乘积到底是域乘域,还是元组乘元组?

笛卡尔乘积的意义

[转]sql语句中出现笛卡尔乘积 SQL查询入门篇

详解T-SQL的联接机制

php批量生成 sku组合,开发商品模块的都得会