要生成从一组不同长度的数组中获取的所有可能的元素组合,JavaScript 程序员面临着独特的挑战。自定义解决方案来处理动态数量的数组可能很棘手。
一种简单而有效的方法是采用递归辅助函数,如下所示:
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 中从不同长度的数组高效生成笛卡尔积?的详细内容。更多信息请关注PHP中文网其他相关文章!