es-toolkit
Version:
A state-of-the-art, high-performance JavaScript utility library with a small bundle size and strong type annotations.
24 lines (23 loc) • 591 B
JavaScript
//#region src/array/cartesianProduct.ts
function cartesianProduct(...arrs) {
if (arrs.length === 0) return [[]];
let total = 1;
for (let i = 0; i < arrs.length; i++) total *= arrs[i].length;
if (total === 0) return [];
const n = arrs.length;
const result = Array(total);
for (let i = 0; i < total; i++) {
const tuple = Array(n);
let idx = i;
for (let j = n - 1; j >= 0; j--) {
const arr = arrs[j];
const len = arr.length;
tuple[j] = arr[idx % len];
idx = Math.floor(idx / len);
}
result[i] = tuple;
}
return result;
}
//#endregion
export { cartesianProduct };