求JS输出二维数组所有组合的函数

如数组ARR=[[A,B,C],F,[D,E]],其中ARR的长度不确定,ARR成员的长度也不确定,要求返回如下数组:ARR2=[[A,F,D],[A,F,E],[B,F... 如数组ARR=[[A,B,C],F,[D,E]],其中ARR的长度不确定,ARR成员的长度也不确定,要求返回如下数组:
ARR2=[[A,F,D],[A,F,E],[B,F,D],[B,F,E],[C,F,D],[C,F,E]],
本题即相对于要输出3*2=6种情况的数组集合
展开
 我来答
yugi111
2014-03-15 · TA获得超过8.1万个赞
知道大有可为答主
回答量:5.1万
采纳率:70%
帮助的人:1.3亿
展开全部
给你个完美的递归算法,我敢说比他们的都好!

var array = [['A', 'B', 'C'], 'F', ['D', 'E'], 1, 'kyo', 'yugi111'];
var len = array.length;
var results = [];
var indexs = {};
function specialSort(start) {
    start++;
    if (start > len - 1) {
        return;
    }
    if (!indexs[start]) {
        indexs[start] = 0;
    }
    if (!(array[start] instanceof Array)) {
        array[start] = [array[start]];
    }
    for (indexs[start] = 0; indexs[start] < array[start].length; indexs[start]++) {
        specialSort(start);
        if (start == len - 1) {
            var temp = [];
            for (var i = len - 1; i >= 0; i--) {
                if (!(array[start - i] instanceof Array)) {
                    array[start - i] = [array[start - i]];
                }
                temp.push(array[start - i][indexs[start - i]]);
            }
            results.push(temp);
        }
    }
}

specialSort(-1);
console.log(results);
自由de王国
推荐于2017-11-26 · TA获得超过1066个赞
知道小有建树答主
回答量:661
采纳率:50%
帮助的人:841万
展开全部
arr = [["A","B","C"],"D",["E","F"],["J","G","H","I"]];
arr2 = [];
function all_arrs(arr,level,former){
if(arr.length == level + 1){
if(arr[level] instanceof Array){
for(var i = 0; i < arr[level].length; i++){
temp = former.slice(0);
temp.push(arr[level][i]);
arr2.push(temp);
}
}
else{
temp = former.slice(0);
temp.push(arr[level]);
arr2.push(temp);
}
}
else{
if(arr[level] instanceof Array){
for(var i = 0; i < arr[level].length; i++){
temp = former.slice(0);
temp.push(arr[level][i]);
all_arrs(arr,level+1,temp);
}
}
else{
temp = former.slice(0);
temp.push(arr[level]);
all_arrs(arr,level+1,temp);
}
}
}
all_arrs(arr,0,new Array(0));

其实我js不熟,所以有些地方可能比较繁琐。如果你有那几行重复代码的简单写法,一定要告诉我

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式