组合排列所有方式 怎么写啊。。

沫锐动力 2015-06-25 08:35:39
要组合排列以下这些关键字。。
应该怎么写。。基础功不好。嵌套循环。。逻辑屡不清了。。求教。。谢谢。。

数组:
aa=["北京","天津","上海"]
bb=["一汽","三菱"]
cc=["挖掘机","收割机","推土机"]
dd=["哪家强","哪家好"]
输出结果:
北京一汽挖掘机哪家强
北京一汽挖掘机哪家好
北京一汽收割机哪家强
北京一汽收割机哪家好
北京一汽推土机哪家强
北京一汽推土机哪家好
北京三菱挖掘机哪家强
北京三菱挖掘机哪家好
北京三菱收割机哪家强
北京三菱收割机哪家好
北京三菱推土机哪家强
北京三菱推土机哪家好
...全文
207 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
scscms太阳光 2015-06-26
  • 打赏
  • 举报
回复
aa=["北京","天津","上海"]
bb=["一汽","三菱"]
cc=["挖掘机","收割机","推土机"]
dd=["哪家强","哪家好"]

Array.prototype.groups = function(x){
  if(this.length){
    var temp = [];
    for(var i = 0;i < this.length;i ++){
      for(var n = 0;n < x.length;n ++){
        temp.push(this[i] + x[n]);
      }
    }
    return temp.slice(0);
  }else{
    return x;
  }
}

var str = aa.groups(bb);
     str = str.groups(cc);
     str = str.groups(dd);
console.log(str.join("\n"));
scscms太阳光 2015-06-26
  • 打赏
  • 举报
回复
aa=["北京","天津","上海"]
bb=["一汽","三菱"]
cc=["挖掘机","收割机","推土机"]
dd=["哪家强","哪家好"]

Array.prototype.groups = function(x){
  if(this.length){
    var temp = [];
    for(var i = 0;i < this.length;i ++){
      for(var n = 0;n < x.length;n ++){
        temp.push(this[i] + x[n]);
      }
    }
    return temp.slice(0);
  }else{
    return x;
  }
}

var str = aa.groups(bb);
     str = str.groups(cc);
     str = str.groups(dd);
console.log(str.join("\n"));
沫锐动力 2015-06-25
  • 打赏
  • 举报
回复
引用 8 楼 jslang 的回复:

var arr = [
	["北京","天津","上海"],
	["一汽","三菱"],
	["挖掘机","收割机","推土机"],
	["哪家强","哪家好"]
];
function loop(i)
{
	if (i>=arr.length)
		return [""];
	var narr = [];
	var larr = loop(i+1);
	for(var a=0; a<arr[i].length; a++)
		for(var b=0; b<larr.length; b++)
			narr.push(arr[i][a]+larr[b])
	return narr;
}
document.write(loop(0).join("<br />"));

解决了~~~多谢~~
天际的海浪 2015-06-25
  • 打赏
  • 举报
回复

var arr = [
	["北京","天津","上海"],
	["一汽","三菱"],
	["挖掘机","收割机","推土机"],
	["哪家强","哪家好"]
];
function loop(i)
{
	if (i>=arr.length)
		return [""];
	var narr = [];
	var larr = loop(i+1);
	for(var a=0; a<arr[i].length; a++)
		for(var b=0; b<larr.length; b++)
			narr.push(arr[i][a]+larr[b])
	return narr;
}
document.write(loop(0).join("<br />"));

沫锐动力 2015-06-25
  • 打赏
  • 举报
回复
引用 5 楼 starfd 的回复:
我写过一个笛卡尔乘积的组合算法,根据索引得出所有组合,不管你是几个组合,都按索引只for三次,代码我要回去找找
好的 谢谢 希望能详细点。。平常只写写交互动效什么的。。这个理解起来很困难。。
  • 打赏
  • 举报
回复
递归的意思就是你所有的集合组织成一个大的集合,然后递归内部集合
  • 打赏
  • 举报
回复
我写过一个笛卡尔乘积的组合算法,根据索引得出所有组合,不管你是几个组合,都按索引只for三次,代码我要回去找找
沫锐动力 2015-06-25
  • 打赏
  • 举报
回复
引用 3 楼 jslang 的回复:
[quote=引用 2 楼 MoruaLee 的回复:] [quote=引用 1 楼 starfd 的回复:] 四个for循环不就行了?
for()
{
   for()
   {
         for()
         {
              for()
             {
            }
        }
   }
}
如果数组数量不确定呢。。。[/quote] 那就用递归啊,[/quote] 平常之写写界面交互动效什么的。。递归是啥都搞不太清楚。。
天际的海浪 2015-06-25
  • 打赏
  • 举报
回复
引用 2 楼 MoruaLee 的回复:
[quote=引用 1 楼 starfd 的回复:] 四个for循环不就行了?
for()
{
   for()
   {
         for()
         {
              for()
             {
            }
        }
   }
}
如果数组数量不确定呢。。。[/quote] 那就用递归啊,
沫锐动力 2015-06-25
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
四个for循环不就行了?
for()
{
   for()
   {
         for()
         {
              for()
             {
            }
        }
   }
}
如果数组数量不确定呢。。。
  • 打赏
  • 举报
回复
四个for循环不就行了?
for()
{
   for()
   {
         for()
         {
              for()
             {
            }
        }
   }
}

87,955

社区成员

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

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