Cartesian product for big inputs
npm install big-cartesian






Cartesian product for big inputs.
Retrieves every possible combination between several arrays
(cartesian product):
- can handle an infinite number of combinations
- requires almost no memory
This module is perfect when you combine hundreds of arrays or when those arrays
produce millions of combinations. Otherwise you should usefast-cartesian instead as it is
much faster.
``js
import bigCartesian from 'big-cartesian'
for (const values of bigCartesian([
['red', 'blue'],
['circle', 'square'],
])) {
console.log(values)
}
// [ 'red', 'circle' ]
// [ 'red', 'square' ]
// [ 'blue', 'circle' ]
// [ 'blue', 'square' ]
`
``
npm install big-cartesian
This package works in both Node.js >=18.18.0 and
browsers.
This is an ES module. It must be loaded using
an import or import() statement,
not require(). If TypeScript is used, it must be configured to
output ES modules,
not CommonJS.
inputs: Array\Iterable
_Return value_:
Iterates over each combination of inputs.
This works with an infinite number of combinations.
Arrays in JavaScript have a size limit of 4 trillions of elements. You can
bypass this limit by using iterables or generator functions instead.
`js
import bigCartesian from 'big-cartesian'
const generator = function* () {
// This generator can generate an infinite number of elements
}
// Notice we pass the function itself: generator not generator()`
for (const values of bigCartesian([['red', 'blue'], generator])) {
console.log(values)
}
See the
following benchmarks.
For any question, _don't hesitate_ to submit an issue on GitHub.
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!