要產生從一組不同長度的數組中獲取的所有可能的元素組合,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中文網其他相關文章!