Fast cartesian product.
Retrieves every possible combination between several arrays (cartesian product).
Fastest available library in JavaScript.
When producing millions of combinations or combining hundreds of arrays,
big-cartesian
should be used
instead.
const fastCartesian = require('fast-cartesian')
console.log(
fastCartesian([
['red', 'blue'],
['circle', 'square'],
]),
)
// [
// [ 'red', 'circle' ],
// [ 'red', 'square' ],
// [ 'blue', 'circle' ],
// [ 'blue', 'square' ]
// ]
// Return initial indexes
console.log(
fastCartesian(
[
['red', 'blue'],
['circle', 'square'],
].map(Object.entries),
),
)
// [
// [ [ '0', 'red' ], [ '0', 'circle' ] ],
// [ [ '0', 'red' ], [ '1', 'square' ] ],
// [ [ '1', 'blue' ], [ '0', 'circle' ] ],
// [ [ '1', 'blue' ], [ '1', 'square' ] ]
// ]
You can try this library:
- either directly in your browser.
- or by executing the
examples
files in a terminal.
npm install fast-cartesian
inputs
: Array<Array>
Return value: Array<Array>
Returns a two-dimensional Array
where each row is a combination of inputs
.
The following benchmarks compare the performance of this
library against alternatives
(big-cartesian
,
cartesian-product
,
fast-cartesian-product
,
power-cartesian-product
,
cartesian
and
lodash.product
).
## fast-cartesian ######################
1 array 1.05ms
2 arrays 1.13ms
4 arrays 1.34ms
8 arrays 1.50ms
16 arrays 3.75ms
## fast-cartesian-product ##############
1 array 1.10ms
2 arrays 1.52ms
4 arrays 2.39ms
8 arrays 4.27ms
16 arrays 9.33ms
## big-cartesian #######################
1 array 7.61ms
2 arrays 7.12ms
4 arrays 8.12ms
8 arrays 6.72ms
16 arrays 15.50ms
## power-cartesian-product #############
1 array 5.08ms
2 arrays 5.23ms
4 arrays 7.37ms
8 arrays 11.47ms
16 arrays 19.34ms
## cartesian-product ###################
1 array 5.57ms
2 arrays 2.79ms
4 arrays 10.13ms
8 arrays 12.96ms
16 arrays 18.40ms
## cartesian ###########################
1 array 6.42ms
2 arrays 15.34ms
4 arrays 16.34ms
8 arrays 20.71ms
16 arrays 30.79ms
## lodash.product ######################
1 array 37.97ms
2 arrays 38.38ms
4 arrays 41.35ms
8 arrays 51.68ms
16 arrays 75.40ms
If you found a bug or would like a new feature, don't hesitate to submit an issue on GitHub.
For other questions, feel free to chat with us on Gitter.
Everyone is welcome regardless of personal background. We enforce a Code of conduct in order to promote a positive and inclusive environment.
This project was made with ❤️. The simplest way to give back is by starring and sharing it online.
If the documentation is unclear or has a typo, please click on the page's Edit
button (pencil icon) and suggest a correction.
If you would like to help us fix a bug or add a new feature, please check our guidelines. Pull requests are welcome!
ehmicky 💻 🎨 🤔 📖 |