首页 >web前端 >js教程 >如何在 JavaScript 中从 N 个数组(每个数组有 M 个元素)生成所有可能的组合?

如何在 JavaScript 中从 N 个数组(每个数组有 M 个元素)生成所有可能的组合?

Patricia Arquette
Patricia Arquette原创
2024-11-30 16:27:11881浏览

How to Generate All Possible Combinations from N Arrays with M Elements Each in JavaScript?

在 JavaScript 中从 N 个数组与 M 个元素生成组合[重复]

简介
组合多个数组中的元素可以产生多种组合,这在统计分析或组合问题中通常是必不可少的。本文提出了一种 JavaScript 综合解决方案,用于从 N 个数组生成所有可能的组合,每个数组包含 M 个元素。

递归方法
提供的解决方案采用递归辅助函数来构造组合逐渐地。该函数迭代每个数组,包括结果组合中的元素。如果当前数组是最后一个,则将完成的组合添加到结果数组中。否则,该函数将使用更新的组合进行递归,并继续执行下一个数组。

实现

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]);

结果将是一个包含所有可能组合的数组:

[
  [0, 0, 0],
  [0, 0, 1],
  [0, 0, 2],
  [0, 1, 0],
  [0, 1, 1],
  [0, 1, 2],
  [0, 2, 0],
  [0, 2, 1],
  [0, 2, 2],
  // ...
]

注意
如果我们更喜欢传递数组的数组我们可以将函数签名修改为函数 cartesian(args),而不是单个参数。

以上是如何在 JavaScript 中从 N 个数组(每个数组有 M 个元素)生成所有可能的组合?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn