明白人的gravatar头像
明白人 2016-04-14 17:10:43

js如何将数组实现排列组合?

多个数组(数量不定)
例如三个数组 {a,b} {1,2} {d}
排列组合后为
a,1,d
a,2,d
b,1,d
b,2,d

所有回答列表(2)
zfy18856491476的gravatar头像
zfy18856491476  LV3 2016年4月15日

 <script type="text/javascript">

    var a = ["A","B","C"];

    var b = ["1", "2","3"];

    window.onload = function () {

        var a1 = new objPL(a);//计算数组a的排列组合

        var b1 = new objPL(b);//计算数组b的排列组合

        var str = "";

        var n = 0;

        //a1和b1的排列组合个数就是两者相乘(双层循环)

        for (var i = 0; i < a1.length; i++) {

            for (var j = 0; j < b1.length; j++) {

                str += a1[i] + b1[j] + " ";

                n++;

            }

            str += "";

        }

        document.write("共" + n + "个");

        document.write(str);

    }

    //取数组的排列组合

    function objPL(arr) {

        this.a = arr;

        this.r = [];

        this.n = 0;

        //从M个数里面取N个(递归)

        this.mGetN = function (curIndex, num, curSelect) {

            if (num == 0) {

                this.r[this.n++] = curSelect; return;

            }

            if (this.a.length - curIndex < num) return;

            this.mGetN(curIndex + 1, num - 1, curSelect + this.a[curIndex]);

            this.mGetN(curIndex + 1, num, curSelect);

        }

        for (var i = 1; i <= this.a.length; i++) {

            this.mGetN(0, i, "");

        }

        return this.r;

    }

    </script>

lcjz99的gravatar头像
lcjz99  LV11 2016年4月18日

function permutate(array,permutatedArray){
 if(!permutatedArray){
  permutatedArray = [];
 }
 
 if(array.length > 1){
  //弹出第一个数
  var elementCur = array.shift();
  
  //排列剩余的数组
  permutate(array,permutatedArray);
  
  //返回剩余的数组的排列长度
  var permutatedArrayLen = permutatedArray.length;

  //第一个数与其他剩余数组所有数组组合
  for(var j = 0;j < permutatedArrayLen; j++){
   //弹出不齐的组
   var p = permutatedArray.shift();
   
   //把当前元素放到排列好的数组的所有位置
   for(var i = 0; i <= p.length; i++){
    //复制排列好的数组
    var r = p.slice(0);
    
    //插入数据到数组的位置
    r.splice(i, 0, elementCur);
    
    //保存
    permutatedArray.push(r)
   }
  }
 
  //退出条件 
 }else{
  permutatedArray.push([array[0]]);
 }
 

 return permutatedArray;
}

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友