Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多个数组元素的组合_Javascript_Arrays_Algorithm - Fatal编程技术网

Javascript 多个数组元素的组合

Javascript 多个数组元素的组合,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我有这类数据 var arr = [ ["A", "AA"], ["B"], ["C", "CC", "CCC"] ]; 我想得到每个数组中所有元素的组合。例如 A B A B C A B CC A B CCC A C A CC A CCC ... AA B CCC 注意单词的顺序是相同的,这样就不应该是组合B A C中的一个 我尝试了一些逻辑,但没有得到我想要的。我可以得到所有单词的排列和组合,但这不是我要找的 请建议这个问题可以递归解决。也就是说:对于第一个数组,

我有这类数据

var arr = [
    ["A", "AA"],
    ["B"],
    ["C", "CC", "CCC"]
];
我想得到每个数组中所有元素的组合。例如

A B
A B C
A B CC
A B CCC
A C
A CC
A CCC
...
AA B CCC
注意单词的顺序是相同的,这样就不应该是组合
B A C
中的一个

我尝试了一些逻辑,但没有得到我想要的。我可以得到所有单词的排列和组合,但这不是我要找的


请建议

这个问题可以递归解决。也就是说:对于第一个数组,每个元素都有与其他两个数组组合的结果

类似这样的方法可能会奏效:

function arrayCombine ( array ) {
    if (array.length > 1) {
        var result = new Array();

        //This combines all the arrays except the first
        var otherCombs = arrayCombine ( array.slice(1) );

        for ( var n = 0; n < array[0].length; n++ )
            for ( var i = 0; i < otherCombs.length; i++ )
                result.push ( array[0][n] + otherCombs[i] );

        return result;                
    }

    //If we have only one array, the result is the array itself, for it contains in itself all the combinations of one element that can be made
    else return array[0];
}
函数阵列组合(阵列){
如果(array.length>1){
var result=新数组();
//这将合并除第一个阵列之外的所有阵列
var otherCombs=arrayCombine(array.slice(1));
对于(var n=0;n
这个问题可以递归地解决。也就是说:对于第一个数组,每个元素都有与其他两个数组组合的结果

类似这样的方法可能会奏效:

function arrayCombine ( array ) {
    if (array.length > 1) {
        var result = new Array();

        //This combines all the arrays except the first
        var otherCombs = arrayCombine ( array.slice(1) );

        for ( var n = 0; n < array[0].length; n++ )
            for ( var i = 0; i < otherCombs.length; i++ )
                result.push ( array[0][n] + otherCombs[i] );

        return result;                
    }

    //If we have only one array, the result is the array itself, for it contains in itself all the combinations of one element that can be made
    else return array[0];
}
函数阵列组合(阵列){
如果(array.length>1){
var result=新数组();
//这将合并除第一个阵列之外的所有阵列
var otherCombs=arrayCombine(array.slice(1));
对于(var n=0;n
  • 制作一个索引数组(
    idx
    ),每个元素对应于每行。初始值为0
  • 从索引i=0开始
  • 对当前组合执行您所执行的操作
  • 增量
    idx[i]
    。如果小于行的长度,则转到2
  • idx[i]
    设置为零
  • 增量
    i
    。如果大于行数,则终止算法,否则转到2
  • 制作一个索引数组(
    idx
    ),每个元素对应于每行。初始值为0
  • 从索引i=0开始
  • 对当前组合执行您所执行的操作
  • 增量
    idx[i]
    。如果小于行的长度,则转到2
  • idx[i]
    设置为零
  • 增量
    i
    。如果大于行数,则终止算法,否则转到2

  • 您基本上希望在多个列表之间进行排列:

    function permute(input)
    {
      var out = [];
    
      (function permute_r(input, current) {
        if (input.length === 0) {
          out.push(current);
          return;
        }
    
        var next = input.slice(1);
    
        for (var i = 0, n = input[0].length; i != n; ++i) {
          permute_r(next, current.concat([input[0][i]]));
        }
      }(input, []));
    
      return out;
    }
    
    permute(arr);
    

    您基本上希望在多个列表之间进行排列:

    function permute(input)
    {
      var out = [];
    
      (function permute_r(input, current) {
        if (input.length === 0) {
          out.push(current);
          return;
        }
    
        var next = input.slice(1);
    
        for (var i = 0, n = input[0].length; i != n; ++i) {
          permute_r(next, current.concat([input[0][i]]));
        }
      }(input, []));
    
      return out;
    }
    
    permute(arr);
    

    请展示您所做的尝试,我们不是来为您编写的,我们是来帮助您修复错误的。我不希望有一个完整的工作代码,我可以自己编写,我需要的只是一个正确方向的提示@杰克:不,行和列都是动态的。请展示你的尝试,我们不是来为你写的,我们是来帮助你修复你的错误的。我并不期待一个完全可以工作的代码,我可以自己写,我需要的只是一个正确方向的提示@杰克:不,行和列是动态的。