数组组合排列

新手上路,请多包涵
var arr_zb = new Array();
arr_zb[0] =   ['A','B','C'];
arr_zb[1] =   ['B','A','D'];
arr_zb[2] =   ['A','B'];
arr_zb[3] =   ['B','A'];
arr_zb[4] =   ['A','B','E'];

arr_zb[5] =   ['Z','X','D'];
arr_zb[6] =   ['X','Z','C'];
arr_zb[7] =   ['X','Z','E'];

arr_zb[8]  =  ['N','M','C'];
arr_zb[9]  =  ['M','N','D'];
arr_zb[10] =  ['N','M','E'];

一组长度固定为11的数组,其中的元素为长度为N的数组。
求解:
1.相同的元素数组组合在一起
2.组合后的数组长度固定为11
3.固定按照以下搭配
例如-
533组合:
AAAAA+ZZZ+NNN
AAAAA+ZZZ+MMM
AAAAA+XXX+NNN
....

2333组合:
BB+CCC+DDD+EEE
AA+CCC+DDD+EEE
....

其实就是每个数组的元素不动,按照规定的搭配组合。

4.按照以上条件求所有组合

希望有CODER看到可以帮助一下,小弟在这里谢过!

阅读 1.9k
1 个回答
 var countObj = {};
  arr_zb.forEach((arr)=>{
    arr.forEach((key)=>{
      countObj[key] === undefined ? countObj[key] = 1 : ++countObj[key];
    })
  });
  var arrRet = [];
  var getArr = function(key, val, obj){
      var count = 0;
      var keys  = [];
      for(var n in obj){
        count += obj[n];
        keys.push(n);
      }
      for(var k in countObj){
          var v = countObj[k];
          if((count + v) == 11 && keys.indexOf(k) < 0){
            arrRet.push(Object.assign({}, obj, {[k]: v}));
          }else if((count + v) < 11 && keys.indexOf(k) < 0){
            getArr(k, v, Object.assign({}, obj, {[k]: v}));
          }
      }
  }
  for(var d1 in countObj){
    var v1 = countObj[d1];
    getArr(d1, v1, { [d1]: v1 });
  }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题