简介
组合多个数组中的元素可以产生多种组合,这在统计分析或组合问题中通常是必不可少的。本文提出了一种 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中文网其他相关文章!