js的组合实现,支持"二维"


<script>
function combination(array,debug) {
/*
	c   6
  a d   7
1 b e 4 8
------------
这样结构得到所有组合:
1,一个组合的元素最小可是1,最大是列的个数,如示例就是5
2,每列的每一个元素可以与其它列的任意其中一个元素组合,但是一个列元素只允许出现在一个组合中一次
*/
	var store = [];
	var combinationOther = function(array, preObj) {//使用前缀与每行中的列任意一个组合
		var cell;
		while (cell=array.shift() ) {//得到每列
			if (‘‘===cell) continue;//空列
			if (‘object‘ !== typeof cell) cell = [cell];//必须是数组
			if (!cell.length) continue;//空列	
			for (var cr=0;cr<cell.length;cr++) {//列中的每个数据
				var cv = cell[cr];//列中当前数
				if (‘‘===cv) continue;//不处理空串
				var str = preObj.concat(cv);
				str=str.sort().reverse();//按大-小排序
				store.push( str );//把当前组合放入
			
				if (array.length) {//后面还有列
					combinationOther(array.slice(),str.slice());
				}
			}
		}
	};	
	combinationOther(array,[]);	
	debug&&console.log( ‘顺序结果:\n‘,store.join(‘\n‘) );
	store.sort(function(x,y){//按个数排序,多在前
		var xl=‘object‘===typeof x ?x.length:1;
		var yl=‘object‘===typeof y ?y.length:1;
		var r = 0;
		
		if (xl<yl) r=1;//倒过来
		else if (xl>yl) r = -1;//倒过来
		else if(xl===yl) {
			if (x<y) r=1;
			else if (x>y)r=-1;
			else r=0;
		}
		
		return r;//注意倒过来了
	});
	debug&&console.log( ‘按个数大小排序结果:\n‘,store.join(‘\n‘) );
	return store;
}


var data = [
1
,2
,3
];
combination(data,1);


var data = [
1
,2
,3
,[‘a‘,‘b‘,‘c‘]
,4
,[‘g‘,‘lllll‘,‘pppppp‘,‘uuuuu‘]
];
combination(data,1);
</script>





结果




顺序结果:
 1
2,1
3,2,1
3,1
2
3,2
3 s.htm:33
按个数大小排序结果:
 3,2,1
3,2
3,1
2,1
3
2
1 s.htm:49
顺序结果:
 1
2,1
3,2,1
a,3,2,1
a,4,3,2,1
g,a,4,3,2,1
lllll,a,4,3,2,1
pppppp,a,4,3,2,1
uuuuu,a,4,3,2,1
g,a,3,2,1
lllll,a,3,2,1
pppppp,a,3,2,1
uuuuu,a,3,2,1
b,3,2,1
b,4,3,2,1
g,b,4,3,2,1
lllll,b,4,3,2,1
pppppp,b,4,3,2,1
uuuuu,b,4,3,2,1
g,b,3,2,1
lllll,b,3,2,1
pppppp,b,3,2,1
uuuuu,b,3,2,1
c,3,2,1
c,4,3,2,1
g,c,4,3,2,1
lllll,c,4,3,2,1
pppppp,c,4,3,2,1
uuuuu,c,4,3,2,1
g,c,3,2,1
lllll,c,3,2,1
pppppp,c,3,2,1
uuuuu,c,3,2,1
4,3,2,1
g,4,3,2,1
lllll,4,3,2,1
pppppp,4,3,2,1
uuuuu,4,3,2,1
g,3,2,1
lllll,3,2,1
pppppp,3,2,1
uuuuu,3,2,1
a,2,1
a,4,2,1
g,a,4,2,1
lllll,a,4,2,1
pppppp,a,4,2,1
uuuuu,a,4,2,1
g,a,2,1
lllll,a,2,1
pppppp,a,2,1
uuuuu,a,2,1
b,2,1
b,4,2,1
g,b,4,2,1
lllll,b,4,2,1
pppppp,b,4,2,1
uuuuu,b,4,2,1
g,b,2,1
lllll,b,2,1
pppppp,b,2,1
uuuuu,b,2,1
c,2,1
c,4,2,1
g,c,4,2,1
lllll,c,4,2,1
pppppp,c,4,2,1
uuuuu,c,4,2,1
g,c,2,1
lllll,c,2,1
pppppp,c,2,1
uuuuu,c,2,1
4,2,1
g,4,2,1
lllll,4,2,1
pppppp,4,2,1
uuuuu,4,2,1
g,2,1
lllll,2,1
pppppp,2,1
uuuuu,2,1
3,1
a,3,1
a,4,3,1
g,a,4,3,1
lllll,a,4,3,1
pppppp,a,4,3,1
uuuuu,a,4,3,1
g,a,3,1
lllll,a,3,1
pppppp,a,3,1
uuuuu,a,3,1
b,3,1
b,4,3,1
g,b,4,3,1
lllll,b,4,3,1
pppppp,b,4,3,1
uuuuu,b,4,3,1
g,b,3,1
lllll,b,3,1
pppppp,b,3,1
uuuuu,b,3,1
c,3,1
c,4,3,1
g,c,4,3,1
lllll,c,4,3,1
pppppp,c,4,3,1
uuuuu,c,4,3,1
g,c,3,1
lllll,c,3,1
pppppp,c,3,1
uuuuu,c,3,1
4,3,1
g,4,3,1
lllll,4,3,1
pppppp,4,3,1
uuuuu,4,3,1
g,3,1
lllll,3,1
pppppp,3,1
uuuuu,3,1
a,1
a,4,1
g,a,4,1
lllll,a,4,1
pppppp,a,4,1
uuuuu,a,4,1
g,a,1
lllll,a,1
pppppp,a,1
uuuuu,a,1
b,1
b,4,1
g,b,4,1
lllll,b,4,1
pppppp,b,4,1
uuuuu,b,4,1
g,b,1
lllll,b,1
pppppp,b,1
uuuuu,b,1
c,1
c,4,1
g,c,4,1
lllll,c,4,1
pppppp,c,4,1
uuuuu,c,4,1
g,c,1
lllll,c,1
pppppp,c,1
uuuuu,c,1
4,1
g,4,1
lllll,4,1
pppppp,4,1
uuuuu,4,1
g,1
lllll,1
pppppp,1
uuuuu,1
2
3,2
a,3,2
a,4,3,2
g,a,4,3,2
lllll,a,4,3,2
pppppp,a,4,3,2
uuuuu,a,4,3,2
g,a,3,2
lllll,a,3,2
pppppp,a,3,2
uuuuu,a,3,2
b,3,2
b,4,3,2
g,b,4,3,2
lllll,b,4,3,2
pppppp,b,4,3,2
uuuuu,b,4,3,2
g,b,3,2
lllll,b,3,2
pppppp,b,3,2
uuuuu,b,3,2
c,3,2
c,4,3,2
g,c,4,3,2
lllll,c,4,3,2
pppppp,c,4,3,2
uuuuu,c,4,3,2
g,c,3,2
lllll,c,3,2
pppppp,c,3,2
uuuuu,c,3,2
4,3,2
g,4,3,2
lllll,4,3,2
pppppp,4,3,2
uuuuu,4,3,2
g,3,2
lllll,3,2
pppppp,3,2
uuuuu,3,2
a,2
a,4,2
g,a,4,2
lllll,a,4,2
pppppp,a,4,2
uuuuu,a,4,2
g,a,2
lllll,a,2
pppppp,a,2
uuuuu,a,2
b,2
b,4,2
g,b,4,2
lllll,b,4,2
pppppp,b,4,2
uuuuu,b,4,2
g,b,2
lllll,b,2
pppppp,b,2
uuuuu,b,2
c,2
c,4,2
g,c,4,2
lllll,c,4,2
pppppp,c,4,2
uuuuu,c,4,2
g,c,2
lllll,c,2
pppppp,c,2
uuuuu,c,2
4,2
g,4,2
lllll,4,2
pppppp,4,2
uuuuu,4,2
g,2
lllll,2
pppppp,2
uuuuu,2
3
a,3
a,4,3
g,a,4,3
lllll,a,4,3
pppppp,a,4,3
uuuuu,a,4,3
g,a,3
lllll,a,3
pppppp,a,3
uuuuu,a,3
b,3
b,4,3
g,b,4,3
lllll,b,4,3
pppppp,b,4,3
uuuuu,b,4,3
g,b,3
lllll,b,3
pppppp,b,3
uuuuu,b,3
c,3
c,4,3
g,c,4,3
lllll,c,4,3
pppppp,c,4,3
uuuuu,c,4,3
g,c,3
lllll,c,3
pppppp,c,3
uuuuu,c,3
4,3
g,4,3
lllll,4,3
pppppp,4,3
uuuuu,4,3
g,3
lllll,3
pppppp,3
uuuuu,3
a
a,4
g,a,4
lllll,a,4
pppppp,a,4
uuuuu,a,4
g,a
lllll,a
pppppp,a
uuuuu,a
b
b,4
g,b,4
lllll,b,4
pppppp,b,4
uuuuu,b,4
g,b
lllll,b
pppppp,b
uuuuu,b
c
c,4
g,c,4
lllll,c,4
pppppp,c,4
uuuuu,c,4
g,c
lllll,c
pppppp,c
uuuuu,c
4
g,4
lllll,4
pppppp,4
uuuuu,4
g
lllll
pppppp
uuuuu s.htm:33
按个数大小排序结果:
 uuuuu,c,4,3,2,1
uuuuu,b,4,3,2,1
uuuuu,a,4,3,2,1
pppppp,c,4,3,2,1
pppppp,b,4,3,2,1
pppppp,a,4,3,2,1
lllll,c,4,3,2,1
lllll,b,4,3,2,1
lllll,a,4,3,2,1
g,c,4,3,2,1
g,b,4,3,2,1
g,a,4,3,2,1
uuuuu,c,4,3,2
uuuuu,c,4,3,1
uuuuu,c,4,2,1
uuuuu,c,3,2,1
uuuuu,b,4,3,2
uuuuu,b,4,3,1
uuuuu,b,4,2,1
uuuuu,b,3,2,1
uuuuu,a,4,3,2
uuuuu,a,4,3,1
uuuuu,a,4,2,1
uuuuu,a,3,2,1
uuuuu,4,3,2,1
pppppp,c,4,3,2
pppppp,c,4,3,1
pppppp,c,4,2,1
pppppp,c,3,2,1
pppppp,b,4,3,2
pppppp,b,4,3,1
pppppp,b,4,2,1
pppppp,b,3,2,1
pppppp,a,4,3,2
pppppp,a,4,3,1
pppppp,a,4,2,1
pppppp,a,3,2,1
pppppp,4,3,2,1
lllll,c,4,3,2
lllll,c,4,3,1
lllll,c,4,2,1
lllll,c,3,2,1
lllll,b,4,3,2
lllll,b,4,3,1
lllll,b,4,2,1
lllll,b,3,2,1
lllll,a,4,3,2
lllll,a,4,3,1
lllll,a,4,2,1
lllll,a,3,2,1
lllll,4,3,2,1
g,c,4,3,2
g,c,4,3,1
g,c,4,2,1
g,c,3,2,1
g,b,4,3,2
g,b,4,3,1
g,b,4,2,1
g,b,3,2,1
g,a,4,3,2
g,a,4,3,1
g,a,4,2,1
g,a,3,2,1
g,4,3,2,1
c,4,3,2,1
b,4,3,2,1
a,4,3,2,1
uuuuu,c,4,3
uuuuu,c,4,2
uuuuu,c,4,1
uuuuu,c,3,2
uuuuu,c,3,1
uuuuu,c,2,1
uuuuu,b,4,3
uuuuu,b,4,2
uuuuu,b,4,1
uuuuu,b,3,2
uuuuu,b,3,1
uuuuu,b,2,1
uuuuu,a,4,3
uuuuu,a,4,2
uuuuu,a,4,1
uuuuu,a,3,2
uuuuu,a,3,1
uuuuu,a,2,1
uuuuu,4,3,2
uuuuu,4,3,1
uuuuu,4,2,1
uuuuu,3,2,1
pppppp,c,4,3
pppppp,c,4,2
pppppp,c,4,1
pppppp,c,3,2
pppppp,c,3,1
pppppp,c,2,1
pppppp,b,4,3
pppppp,b,4,2
pppppp,b,4,1
pppppp,b,3,2
pppppp,b,3,1
pppppp,b,2,1
pppppp,a,4,3
pppppp,a,4,2
pppppp,a,4,1
pppppp,a,3,2
pppppp,a,3,1
pppppp,a,2,1
pppppp,4,3,2
pppppp,4,3,1
pppppp,4,2,1
pppppp,3,2,1
lllll,c,4,3
lllll,c,4,2
lllll,c,4,1
lllll,c,3,2
lllll,c,3,1
lllll,c,2,1
lllll,b,4,3
lllll,b,4,2
lllll,b,4,1
lllll,b,3,2
lllll,b,3,1
lllll,b,2,1
lllll,a,4,3
lllll,a,4,2
lllll,a,4,1
lllll,a,3,2
lllll,a,3,1
lllll,a,2,1
lllll,4,3,2
lllll,4,3,1
lllll,4,2,1
lllll,3,2,1
g,c,4,3
g,c,4,2
g,c,4,1
g,c,3,2
g,c,3,1
g,c,2,1
g,b,4,3
g,b,4,2
g,b,4,1
g,b,3,2
g,b,3,1
g,b,2,1
g,a,4,3
g,a,4,2
g,a,4,1
g,a,3,2
g,a,3,1
g,a,2,1
g,4,3,2
g,4,3,1
g,4,2,1
g,3,2,1
c,4,3,2
c,4,3,1
c,4,2,1
c,3,2,1
b,4,3,2
b,4,3,1
b,4,2,1
b,3,2,1
a,4,3,2
a,4,3,1
a,4,2,1
a,3,2,1
4,3,2,1
uuuuu,c,4
uuuuu,c,3
uuuuu,c,2
uuuuu,c,1
uuuuu,b,4
uuuuu,b,3
uuuuu,b,2
uuuuu,b,1
uuuuu,a,4
uuuuu,a,3
uuuuu,a,2
uuuuu,a,1
uuuuu,4,3
uuuuu,4,2
uuuuu,4,1
uuuuu,3,2
uuuuu,3,1
uuuuu,2,1
pppppp,c,4
pppppp,c,3
pppppp,c,2
pppppp,c,1
pppppp,b,4
pppppp,b,3
pppppp,b,2
pppppp,b,1
pppppp,a,4
pppppp,a,3
pppppp,a,2
pppppp,a,1
pppppp,4,3
pppppp,4,2
pppppp,4,1
pppppp,3,2
pppppp,3,1
pppppp,2,1
lllll,c,4
lllll,c,3
lllll,c,2
lllll,c,1
lllll,b,4
lllll,b,3
lllll,b,2
lllll,b,1
lllll,a,4
lllll,a,3
lllll,a,2
lllll,a,1
lllll,4,3
lllll,4,2
lllll,4,1
lllll,3,2
lllll,3,1
lllll,2,1
g,c,4
g,c,3
g,c,2
g,c,1
g,b,4
g,b,3
g,b,2
g,b,1
g,a,4
g,a,3
g,a,2
g,a,1
g,4,3
g,4,2
g,4,1
g,3,2
g,3,1
g,2,1
c,4,3
c,4,2
c,4,1
c,3,2
c,3,1
c,2,1
b,4,3
b,4,2
b,4,1
b,3,2
b,3,1
b,2,1
a,4,3
a,4,2
a,4,1
a,3,2
a,3,1
a,2,1
4,3,2
4,3,1
4,2,1
3,2,1
uuuuu,c
uuuuu,b
uuuuu,a
uuuuu,4
uuuuu,3
uuuuu,2
uuuuu,1
pppppp,c
pppppp,b
pppppp,a
pppppp,4
pppppp,3
pppppp,2
pppppp,1
lllll,c
lllll,b
lllll,a
lllll,4
lllll,3
lllll,2
lllll,1
g,c
g,b
g,a
g,4
g,3
g,2
g,1
c,4
c,3
c,2
c,1
b,4
b,3
b,2
b,1
a,4
a,3
a,2
a,1
4,3
4,2
4,1
3,2
3,1
2,1
uuuuu
pppppp
lllll
g
c
b
a
4
3
2

js的组合实现,支持"二维"

上一篇:基于Docker的持续交付系列( 三):阿里云持续交付平台帮你实现


下一篇:一个初级码农的测试之旅(一)——初识单元测试