JavaScript 计算排列组合的函数

posted on 2009-11-04 11:02:21+08:00 by david
  1. var test = new Array();
  2. test[0] = new Array('a1', 'a2');
  3. test[1] = new Array('b1', 'b2', 'b3');
  4. test[2] = new Array('c1', 'c2');
  5.  
  6. function combin(CombinList){
  7. var Result = new Array();
  8. var CombineCount = 1;
  9. for(i in CombinList){
  10. CombineCount *= CombinList[i].length;
  11. }
  12. var RepeatTime = CombineCount;
  13. for(i in CombinList){
  14. var ClassNo = i;
  15. var StudentList = CombinList[i];
  16. RepeatTime = RepeatTime/StudentList.length;
  17. var StartPosition = 1;
  18. for(j in StudentList){
  19. var TempStartPosition = StartPosition;
  20. var SpaceCount = CombineCount/StudentList.length/RepeatTime;
  21. for(var J = 1; J <= SpaceCount; J ++){
  22. for(var I = 0; I < RepeatTime; I ++){
  23. if(typeof(Result[TempStartPosition + I]) == 'undefined'){
  24. Result[TempStartPosition + I] = new Array();
  25. }
  26. Result[TempStartPosition + I][ClassNo] = StudentList[j];
  27. }
  28. TempStartPosition += RepeatTime*StudentList.length;
  29. }
  30. StartPosition += RepeatTime;
  31. }
  32. }
  33. return Result;
  34. }
  35.  
  36. document.write('<pre>');
  37. var r = combin(test);
  38. for(i in r){
  39. document.write(r[i].join('-')+' ');
  40. document.write('\n');
  41. }
  42. document.write('</pre>');
  43.  
  44. /*
  45. 得出的结果是:
  46.  
  47. a1-b1-c1
  48. a1-b1-c2
  49. a1-b2-c1
  50. a1-b2-c2
  51. a1-b3-c1
  52. a1-b3-c2
  53. a2-b1-c1
  54. a2-b1-c2
  55. a2-b2-c1
  56. a2-b2-c2
  57. a2-b3-c1
  58. a2-b3-c2
  59. */

All Code Snippets

Hot Code Snippets

New Code Snippets