在数组中生成字符排列-JavaScript

在数组中生成字符排列-JavaScript,javascript,algorithm,recursion,permutation,Javascript,Algorithm,Recursion,Permutation,我正在开发一个JavaScript函数,它将生成嵌套数组的排列(我们称之为输入)。我想这样做,排列的长度将是input.length。 因此,考虑到 var input = [["0", "5", "9"], ["2", "3"], ["0", "5", "4"]]; 我希望生成长度为3的排列,第一个字符包含[“0”、“5”、“9”]中的任何一个,第二个字符包含[“2”、“3”]中的任何一个,等等 我的主要挑战是我对递归的理解不够好,无法将其应用于手头的问题。我了解一般原理,可以逐步了解给定函

我正在开发一个JavaScript函数,它将生成嵌套数组的排列(我们称之为输入)。我想这样做,排列的长度将是input.length。 因此,考虑到

var input = [["0", "5", "9"], ["2", "3"], ["0", "5", "4"]];
我希望生成长度为3的排列,第一个字符包含[“0”、“5”、“9”]中的任何一个,第二个字符包含[“2”、“3”]中的任何一个,等等

我的主要挑战是我对递归的理解不够好,无法将其应用于手头的问题。我了解一般原理,可以逐步了解给定函数的行为(显然,函数越复杂,我理解它所花的时间就越长。当我不能集中精力在函数上时,我会使用便笺,并在墙上用一个单独的便笺映射每个调用。这样我可以更容易地可视化模式,通常经过几个调用后,我的理解会更好)。 然而,如果我写的函数和我能理解的一样,我可能会很挣扎

所以我发现了一个函数,它生成一个简单字符串的排列,目的是以某种方式修改它,以便它处理嵌套数组并生成所需的输出

var permutations = [];
function doPerm(str, arr) {
    if (typeof (str) == 'string') str = str.split('');
    if (str.length == 0) permutations.push(arr.join(''));
    for (var i = 0; i < str.length; i++) {
        var x = str.splice(i, 1);
        arr.push(x);
        doPerm(str, arr);
        arr.pop();
        str.splice(i, 0, x);
    }
}
var置换=[];
函数doPerm(str、arr){
if(typeof(str)='string')str=str.split(“”);
如果(str.length==0)置换.push(arr.join(“”));
对于(变量i=0;i
修改将在现有函数的基础上添加另一个级别(正如我想象的那样,“rest”变量本身必须是一个排列)

然而,我相信有一种方法可以简化这个问题。
对此的任何指导或可能的解决方案都将不胜感激。

这里是一个JavaScript递归解决方案。我试图将您的文字与函数中的适当步骤相匹配,请参阅注释

函数f(输入、索引、结果){ //“…排列的长度将为输入长度。长度” if(index==input.length){ $(“#输出”).append(JSON.stringify(result)+“
”;//输出 return;//终止此特定线程 } //包含[“0”、“5”、“9”中的任何一个作为第一个字符的 对于(var i=0;i
让我们试试天真的方法

foreach input1 in input[1]
    foreach input2 in input[2]
        foreach input3 in input[3]
            print input1*100 + input2*10 + input3*1

实现和替换上述代码段应该很容易:)

您实际想要实现什么?如果我正确理解了你的问题,给定
input=[“3,4”],[“8”,“9”],[“5”,“6”];
我希望函数生成
输出=[“385”,“386”,“395”,“396”,“485”,“486”,“495”,“496”]
谢谢!如果我正确理解了这个问题,OP希望它适用于不同长度的输入,因此固定数量的嵌套循环将不起作用。