<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
1