簡介
組合多個陣列中的元素可以產生多種組合,這在統計分析或組合問題中通常是必不可少的。本文提出了一種 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中文網其他相關文章!