用javascript或jquery如何获取三个数组的笛卡尔积问题,自己想了两天,实在无能为力了,算法过于复杂。

DRenTeng 2012-08-20 11:19:43
比如有n个数组,数组的数量是不固定的,这个是前提。具体的效果,我举个例子:
假设有三个数组:
var aa=[1,2];
var bb = [7];
var cc = [4,8];
要获取的数据是这样的:
[1, 7, 4]
[1, 7, 8]
[2, 7, 4]
[2, 7, 8]
就是获取数据库的笛卡尔积形式的数据.
...全文
451 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
DRenTeng 2012-09-01
  • 打赏
  • 举报
回复
诚心向各位学习,谢谢各位!
hebsxl2000 2012-08-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

引用 14 楼 的回复:
引用楼主 的回复:
要获取的数据是这样的:
[1, 7, 4]
[1, 7, 8]
[2, 7, 4]
[2, 7, 8]
就是获取数据库的笛卡尔积形式的数据.

没星星不是你的错,也不要吵不要闹,解决楼主问题就是。

你很喜欢揪错的么?我却对这个没兴趣,是不是符合自有楼主判断
楼主举的几个数组只是示例吧了,你把我写的代码上几个数组换成楼主列举……
[/Quote]

别生气,顶你,猩猩哥可能刚开始没注意,给楼主解决就好了
未知数 2012-08-23
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
别生气,顶你,猩猩哥可能刚开始没注意,给楼主解决就好了
[/Quote]

谢谢,
刚开始我也是这样想,本不觉得生气,只是让他之处哪儿不对。
但我说了代码已经测试过以后,他仍然看都不看就说我错;我在第二次时已经说得更加清清楚楚了,但他居然还是看都不看在那挑刺。
喜欢挑刺就挑吧,在我已经确认代码无误的情况下,好歹也该仔细分析或测试一下,确定代码有错误以后再开腔了吧?他到好,仍然是开黄腔,这人确实挺能气人
未知数 2012-08-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
引用楼主 的回复:
要获取的数据是这样的:
[1, 7, 4]
[1, 7, 8]
[2, 7, 4]
[2, 7, 8]
就是获取数据库的笛卡尔积形式的数据.

没星星不是你的错,也不要吵不要闹,解决楼主问题就是。
[/Quote]
你很喜欢揪错的么?我却对这个没兴趣,是不是符合自有楼主判断
楼主举的几个数组只是示例吧了,你把我写的代码上几个数组换成楼主列举那几个,结果自然会是需要的,你连这点逻辑都没有?
还有关于星星的问题,或许能说明你干的时间比我长,经验也或许比我更丰富,但这个是算法逻辑问题,关星星什么事?
我只是觉得你代码看都不看就直接否定别人的答案的做法实在欠妥,包括你现在这一楼的回答同样显得很弱智,你还是没看代码吧?
scscms太阳光 2012-08-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
要获取的数据是这样的:
[1, 7, 4]
[1, 7, 8]
[2, 7, 4]
[2, 7, 8]
就是获取数据库的笛卡尔积形式的数据.
[/Quote]
没星星不是你的错,也不要吵不要闹,解决楼主问题就是。
未知数 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
楼上的有没有测试过呀?好像不行哦。
[/Quote]
当然测试过了,哪里不行了请说清楚
scscms太阳光 2012-08-21
  • 打赏
  • 举报
回复
楼上的有没有测试过呀?好像不行哦。
未知数 2012-08-21
  • 打赏
  • 举报
回复
呃 没注意数组数量不定:
可以使用递归
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数组就是所需结果
未知数 2012-08-21
  • 打赏
  • 举报
回复
就算js不是你的方向,不知道数组alert弹出的东西,但略微看看代码也应该明白的,请不要看都不看就乱说好么?
未知数 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
.........
toResult(0);//函数执行后result数组就是所需结果
alert(result); //结果是:,1,1,1,1,1,1,2,1,1,1,3,1,1,2,1,1,1,2,2,1,1,2,3,1,1,3,1,1,1,3,2,1,1,3,3,1,2,1,1,1,2,1,2,1,2,1,3,1,2,2,1,1,2,2,2,1,2,2,3,1,2,3,1,1,2,3,……
[/Quote]
请不要乱说好么,不会看代码,只会alert?
结果是[[1,1,1,1],[1,1,1,2],[1,1,1,3],......],总共81个。
alert时会调用对象的toString方法再输出,而数组的toString方法就是在成员间用逗号分隔连接为字符串,所以alert就是这个结果。但实际的情况是一个二维数组。
亏你还有星星,这都不知道么?
scscms太阳光 2012-08-21
  • 打赏
  • 举报
回复
.........
toResult(0);//函数执行后result数组就是所需结果
alert(result); //结果是:,1,1,1,1,1,1,2,1,1,1,3,1,1,2,1,1,1,2,2,1,1,2,3,1,1,3,1,1,1,3,2,1,1,3,3,1,2,1,1,1,2,1,2,1,2,1,3,1,2,2,1,1,2,2,2,1,2,2,3,1,2,3,1,1,2,3,2,1,2,3,3,1,3,1,1,1,3,1,2,1,3,1,3,1,3,2,1,1,3,2,2,1,3,2,3,1,3,3,1,1,3,3,2,1,3,3,3,2,1,1,1,2,1,1,2,2,1,1,3,2,1,2,1,2,1,2,2,2,1,2,3,2,1,3,1,2,1,3,2,2,1,3,3,2,2,1,1,2,2,1,2,2,2,1,3,2,2,2,1,2,2,2,2,2,2,2,3,2,2,3,1,2,2,3,2,2,2,3,3,2,3,1,1,2,3,1,2,2,3,1,3,2,3,2,1,2,3,2,2,2,3,2,3,2,3,3,1,2,3,3,2,2,3,3,3,3,1,1,1,3,1,1,2,3,1,1,3,3,1,2,1,3,1,2,2,3,1,2,3,3,1,3,1,3,1,3,2,3,1,3,3,3,2,1,1,3,2,1,2,3,2,1,3,3,2,2,1,3,2,2,2,3,2,2,3,3,2,3,1,3,2,3,2,3,2,3,3,3,3,1,1,3,3,1,2,3,3,1,3,3,3,2,1,3,3,2,2,3,3,2,3,3,3,3,1,3,3,3,2,3,3,3,3
未知数 2012-08-20
  • 打赏
  • 举报
回复
var result=new Array();
for(var i=0;i<aa.length;i++)
{
for(var j=0;j<bb.length;j++)
{
for(var k=0;k<cc.length;k++)
{
var aresult=[aa[i],bb[j],cc[k]];
result.push(aresult);
}
}
}
这样不就行了,很简单的啊
scscms太阳光 2012-08-20
  • 打赏
  • 举报
回复
<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>
scscms太阳光 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:][/Quote]
+什么+
楼主已经强调数组是不定的。谁让你固定是3个数组?
泡泡鱼_ 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 1 楼 的回复:

var result=new Array();
for(var i=0;i<aa.length;i++)
{
for(var j=0;j<bb.length;j++)
{
for(var k=0;k<cc.length;k++)
{
var aresult=[aa[i],bb[j],cc[k]];
result.push(are……
[/Quote]
+1
ziyouren521125 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

var result=new Array();
for(var i=0;i<aa.length;i++)
{
for(var j=0;j<bb.length;j++)
{
for(var k=0;k<cc.length;k++)
{
var aresult=[aa[i],bb[j],cc[k]];
result.push(aresu……
[/Quote]

+1
hch126163 2012-08-20
  • 打赏
  • 举报
回复
3个循环搞定
KK3K2005 2012-08-20
  • 打赏
  • 举报
回复
枚举穷举

87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧