var arr=[['A','B'],['a','b'],[1,2]]
求二维数组 的全排列组合结果:
Aa1,Aa2,Ab1,Ab2,Ba1,Ba2,Bb1,Bb2
function foo(arr){
//用于记录初始数组长度,用于将数组前两组已经获取到全排列的数组进行截取标识
var len=arr.length;
//当递归操作后,数组长度为1时,直接返回arr[0],只有大于1继续处理
if(len>=2){
//每次只做传入数组的前面两个数组进行全排列组合,即arr[0]和arr[1]的全排列组合
var len1=arr[0].length;
var len2=arr[1].length;
var items=new Array(len1*len2);//创建全排列组合有可能次数的数组
var index=0;//记录每次全排列组合后的数组下标
for(var i=0;i<len1;i++){
for(var j=0;j<len2;j++){
if(Array.isArray(arr[0])){
//当第二次进来后,数组第一个元素必定是数组包着数组
items[index]=arr[0][i].concat(arr[1][j]);//对于已经是第二次递归进来的全排列直接追加即可
}else{
items[index]=[arr[