首頁 >web前端 >js教程 >如何在 JavaScript 中從不同長度的陣列高效產生笛卡爾積?

如何在 JavaScript 中從不同長度的陣列高效產生笛卡爾積?

Susan Sarandon
Susan Sarandon原創
2024-11-30 01:52:10768瀏覽

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