Create cartesian product
Combine one item from each set in every possible way.
function cartesian(sets) { return sets.reduce((product, set) => product.flatMap(prefix => set.map(item => [...prefix, item])), [[]]); }
Input & expected output
Input
[
[
"node",
"curl"
],
[
"sandbox",
"live"
]
]Expected output
[
[
"node",
"sandbox"
],
[
"node",
"live"
],
[
"curl",
"sandbox"
],
[
"curl",
"live"
]
]The edge case
Input
[]Expected output
[
[]
]Know the limits
- The result size is the product of the set sizes; the lab caps it at 1,000 combinations.
- The original took sets as separate arguments.
The function above is the implementation used by the lab. The lab validates JSON types and caps size before execution; include equivalent validation when accepting untrusted input in your application.
Source & maintenance
Based on Create cartesian product from the original 1loc collection by Nguyen Huu Phuoc, with robinpokorny. Copyright (c) 2020 phuoc-ng. MIT licensed.
Takes one array of sets; caps the product size before allocating. Original MDX retained as inert source evidence.
Maintained by Oveyon. Original source commit: 14b481cf60df. This edition’s file: contents/create-cartesian-product.mdx in akamind/1loc, commit 0a77f131b22d. Read the license.
Keep exploring
- Clone an array — Create a new array without copying the objects inside it.
- Remove duplicate values — Keep the first occurrence of each value, in its original order.
- Flatten a nested array — Turn a nested array into one sequence of values.