首页 >web前端 >js教程 >如何在 JavaScript 中从不同长度的数组高效生成笛卡尔积?

如何在 JavaScript 中从不同长度的数组高效生成笛卡尔积?

Susan Sarandon
Susan Sarandon原创
2024-11-30 01:52:10769浏览

How to Efficiently Generate Cartesian Products from Arrays of Varying Lengths in JavaScript?

JavaScript 中变化数组的笛卡尔积生成

要生成从一组不同长度的数组中获取的所有可能的元素组合,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中文网其他相关文章!

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