惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Microsoft Security Blog
Microsoft Security Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
V
Visual Studio Blog
宝玉的分享
宝玉的分享
IT之家
IT之家
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
I
InfoQ
B
Blog RSS Feed
T
Threatpost
博客园_首页
M
MIT News - Artificial intelligence
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Know Your Adversary
Know Your Adversary
U
Unit 42
Engineering at Meta
Engineering at Meta
C
Cyber Attacks, Cyber Crime and Cyber Security
月光博客
月光博客
Scott Helme
Scott Helme
T
Tor Project blog
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
S
Schneier on Security
Vercel News
Vercel News
博客园 - Franky
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
L
LangChain Blog
爱范儿
爱范儿
Google DeepMind News
Google DeepMind News
The GitHub Blog
The GitHub Blog
雷峰网
雷峰网
Latest news
Latest news
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hugging Face - Blog
Hugging Face - Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
S
Security Affairs
A
About on SuperTechFans
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
大猫的无限游戏
大猫的无限游戏
W
WeLiveSecurity
Cisco Talos Blog
Cisco Talos Blog
罗磊的独立博客

博客园 - 亲,注意身体

magento 数据清理 magento top menu edit CookieConter 转换为string magento sitemap cms page remove home and generate sitemap error magento toplink blank li magento 语言包 magetno awblog auto generate title id, js replace magento moneybooker 操作 JS 正则 magento checkout require moneybooker api/mqi query magento 记录蜘蛛爬行日志 magento moneybooker redirect 添加信任站点 bat 设置信任站点等级 moneybooker api 文档 magento htaccess Navicat 注册码,序列号 magento 修改订单号 Magento 删除所有订单 适于于1.4+
js 数组 组合(转)
亲,注意身体 · 2012-05-07 · via 博客园 - 亲,注意身体

例如形如 var versions=[
       ["1","2"],
       ["3","4","5"],
       ["6","7","8"] ,
       ["9"]

       。。。
    ]           的二维数组,长度不定,每维元素个数不定。要找出例如 1369,1379,1478,1489等,即类似数组中每行依次任取一个元素后的所有组合来,可用如下方法。先取数组第一行的第一个元素1,2,分别当 成树的的根结点,然后把第二行的各元素3,4,5分别作为以1和2为顶点的树子节点,然后用第三行的各元素6,7,8分别作为3,4,5的子节点。依次, 知道,数组结束。结果如下图所示。最后,数组第一行有几个元素就有几颗数。

            易知,从根节点到叶节点各条路径上的数字连接起来的串即为我们需要的所有组合。

     

          。。。         。。。

     至于代码实现,可以如下这样做,只是需要的空间比较大。方法是:开始时,把所有树位于同一层次的元素,这里是1,2,用一个数组arr0i(0,是第一 层,i代表第几棵树)保存起来,然后处理第二层的元素3,4,5时,首先建立空的数组arr1i,再去遍历第一层形成的数组arr0i各元素,把其中的每 个元素都与3,4,5连接后的结果存入新数组arr1i中。依此直到叶子节点层。比如:最后的数arrn0组中的元素即为第1 棵树产生的字符组合,也就是以1开头的那些字符组合。我是用javascript的数组实现的。下面贴出代码:

<script language="javascript">
 
   var arrLen;   //versions数组长度
   var comCollction=new Array(); //versions数组产生的所有组合值
   //按照下面数组样式,任意添加行,列数(每个元素值都不同,每行元素个数不要求相同)

   var versions=[
  ["1","2"],
  ["3","4","5"],
  ["6","7"],
    ["8"]
 ];
 
   arrLen=versions.length;
   
   function printCombination(){
     
       var k;
       var cur_count=0;
    var len0=versions[0].length;
    //初始化第一个数组,即用versions第一行值生成数组arr0i
    for(var i=0;i<len0;i++){
     eval("var arr"+0+i+"= new Array()");
     eval("arr"+0+i)[0]=versions[0][i];
     
    }
    //循环versions的剩余行 (1至arrLen)
    for(var m=1;m<arrLen;m++){
       //循环arr0i
       for(var n=0;n<len0;n++){
             k=0;
            cur_count=0;
            eval("var arr"+m+n+"= new Array()");
        while(true){
             eval("var temp=arr"+(m-1)+n+"[k]");
             //数组arr(m-1)n[k]的值未定义时,跳出
             if(eval("temp==undefined")){
                   break;
             }
             //versions数组的第m行的每个值与arr(m-1)n[k]连接,保存到新数组arrmn[cur_count]
            for(var j=0;j<versions[m].length;j++){
                   eval("arr"+m+n)[cur_count++]=eval("arr"+(m-1)+n)[k]+versions[m][j];//此处可添加分隔符
             }
        
             k++;
       }
     }
     if(m==arrLen-1){ //最后一轮循环结束时,将产生的所有组合赋值给全局数组comCollction
      var cnt=0;
         for(var w=0;w<len0;w++){
                  for(var t=0;t<eval("arr"+m+w).length;t++){
                        //alert(eval("arr"+m+w)[t]);
                        comCollction[cnt++]=eval("arr"+m+w)[t];
                  }
         }
      
     }
    } 
   }

</script>