日期:2014-05-16  浏览次数:20376 次

用javascript或jquery如何获取三个数组的笛卡尔积问题,自己想了两天,实在无能为力了,算法过于复杂。
比如有n个数组,数组的数量是不固定的,这个是前提。具体的效果,我举个例子:
假设有三个数组:
var aa=[1,2];
var bb = [7];
var cc = [4,8];
要获取的数据是这样的:
[1, 7, 4]
[1, 7, 8]
[2, 7, 4]
[2, 7, 8]
就是获取数据库的笛卡尔积形式的数据.

------解决方案--------------------
JScript code
<script>
var aa=[1,2];
var bb = [7];
var cc = [4,8];
var dd = [1,2,3];
var all=[aa,bb,cc,dd]; //有多少数组都集起来
var i=all.length;

function arrl(arr,k,str){
    if(k>=i){
        return false;
    }else{
        var a=arr[k];
        if(k==i-1){
            for(var l=0;l<a.length;l++){
                document.write (str+a[l]+"]");
            }
        }else{
            for(var l=0;l<a.length;l++){
                if(k==0){str="["};
                str+=a[l]+",";
                var b=k+1;
                arrl(arr,b,str);
            }
        }
    }
}
arrl(all,0,"");
</script>

------解决方案--------------------
呃 没注意数组数量不定:
可以使用递归
var aa=[1,2,3],bb=[1,2,3],cc=[1,2,3],dd=[1,2,3];
var zz=[aa,bb,cc,dd];//此处数组个数任意

var result=new Array();//结果保存到这个数组
function toResult(arrIndex,aresult)
{
if(arrIndex>=zz.length) {result.push(aresult);return;};
var aArr=zz[arrIndex];
if(!aresult) aresult=new Array();
for(var i=0;i<aArr.length;i++)
{
var theResult=aresult.slice(0,aresult.length);
theResult.push(aArr[i]);
toResult(arrIndex+1,theResult);
}
}
toResult(0);//函数执行后result数组就是所需结果