首頁 >web前端 >js教程 >如何在 JavaScript 中從 N 個陣列(每個陣列有 M 個元素)產生所有可能的組合?

如何在 JavaScript 中從 N 個陣列(每個陣列有 M 個元素)產生所有可能的組合?

Patricia Arquette
Patricia Arquette原創
2024-11-30 16:27:11926瀏覽

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