用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]
就是获取数据库的笛卡尔积形式的数据.
[解决办法]
<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数组就是所需结果