JavaScript - 从具有 m 个元素的 n 个数组生成组合

标签 javascript permutation combinations

<分区>

我在编写代码时遇到问题,无法在 JavaScript 中从 n 个数组中生成 m 个元素的组合。我在其他语言中看到过类似的问题,但答案包含我不确定如何翻译的句法或库魔法。

考虑这个数据:

[[0,1], [0,1,2,3], [0,1,2]]

3 个数组,其中包含不同数量的元素。我想要做的是通过组合每个数组中的一个项目来获得所有组合。

例如:

0,0,0 // item 0 from array 0, item 0 from array 1, item 0 from array 2
0,0,1
0,0,2
0,1,0
0,1,1
0,1,2
0,2,0
0,2,1
0,2,2

等等。

如果数组的数量是固定的,那么很容易进行硬编码实现。但是数组的数量可能会有所不同:

[[0,1], [0,1]]
[[0,1,3,4], [0,1], [0], [0,1]]

如有任何帮助,我们将不胜感激。

最佳答案

这是一个使用递归辅助函数的非常简单和简短的函数:

function cartesian(...args) {
    var r = [], max = args.length-1;
    function helper(arr, i) {
        for (var j=0, l=args[i].length; j<l; j++) {
            var a = arr.slice(0); // clone arr
            a.push(args[i][j]);
            if (i==max)
                r.push(a);
            else
                helper(a, i+1);
        }
    }
    helper([], 0);
    return r;
}

用法:

cartesian([0,1], [0,1,2,3], [0,1,2]);

要使函数采用数组数组,只需将签名更改为 function cartesian(args) 而不是使用剩余参数语法。

关于JavaScript - 从具有 m 个元素的 n 个数组生成组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48669576/

相关文章:

c# - 生成通用列表的组合

string - Python 连接字符串以生成字符串中所有单词的组合

javascript - BackboneJS View 渲染延迟,在 iPhone 4s (iOS 8) 上,2015 年

javascript - Bokeh 数据库绘图和更新

javascript - 检查 JavaScript 中的输入是否为空失败

vba - 用于比较两组数据和 ID 排列的 Excel VBA 脚本

dom 准备好但未呈现后的 Javascript 事件

Python: "dynamic"列表的所有可能组合

javascript - 随机选择的事件结果

python - 使用迭代器从 [1, 2, 3] 中获取特定的列表序列