MCPcopy Index your code
hub / github.com/ehmicky/fast-cartesian

github.com/ehmicky/fast-cartesian @9.0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release 9.0.1 ↗ · + Follow
13 symbols 38 edges 10 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Node Browsers TypeScript Codecov Minified size Mastodon Medium

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.

Testimonials

We are now using this library for ourworldindata.org and have seen an almost 50-fold performance increase from the naive method we used before!

@MarcelGerber

Example

import fastCartesian from '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' ] ]
// ]

Install

npm install fast-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.

API

fastCartesian(inputs)

inputs: Array<Array>\ Return value: Array<Array>

Returns a two-dimensional Array where each row is a combination of inputs.

Benchmarks

The following benchmarks compare the performance of this library against alternatives (big-cartesian, cx-product, cartesian-product, fast-cartesian-product, power-cartesian-product, cartesian and lodash.product).

## fast-cartesian ######################
1 array                           1.22ms
2 arrays                          1.82ms
4 arrays                          3.12ms
8 arrays                          1.87ms
16 arrays                         4.82ms

## cxproduct ###########################
1 array                           1.91ms
2 arrays                          3.47ms
4 arrays                          3.62ms
8 arrays                          2.39ms
16 arrays                         5.05ms

## cartesian-product ###################
1 array                           4.61ms
2 arrays                          2.92ms
4 arrays                         11.80ms
8 arrays                         14.78ms
16 arrays                        21.00ms

## big-cartesian #######################
1 array                           7.21ms
2 arrays                          6.68ms
4 arrays                          8.53ms
8 arrays                          7.80ms
16 arrays                        18.30ms

## power-cartesian-product #############
1 array                           6.84ms
2 arrays                          8.54ms
4 arrays                         12.35ms
8 arrays                         11.78ms
16 arrays                        18.98ms

## cartesian ###########################
1 array                           3.44ms
2 arrays                         11.12ms
4 arrays                         13.27ms
8 arrays                         16.11ms
16 arrays                        22.90ms

## fast-cartesian-product ##############
1 array                          23.04ms
2 arrays                         24.11ms
4 arrays                         30.46ms
8 arrays                         45.65ms
16 arrays                        65.12ms

## lodash.product ######################
1 array                          36.51ms
2 arrays                         37.89ms
4 arrays                         41.71ms
8 arrays                         52.72ms
16 arrays                        80.84ms

Support

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.

Contributing

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 💻 🎨 🤔 📖 Marcel Gerber 💻 Paul Heidenreich 💻

Core symbols most depended-on inside this repo

fastCartesian
called by 9
src/main.ts
validateInputs
called by 1
src/validate.ts
validateDimensions
called by 1
src/validate.ts
validateCombinations
called by 1
src/validate.ts
getLoopFunc
called by 1
src/main.ts
mGetLoopFunc
called by 1
src/main.ts
beforeAll
called by 0
benchmark/tasks.js
getIndex
called by 0
benchmark/tasks.js

Shape

Function 13

Languages

TypeScript100%

Modules by API surface

src/validate.ts5 symbols
src/main.ts4 symbols
src/validate.test.ts2 symbols
benchmark/tasks.js2 symbols

For agents

$ claude mcp add fast-cartesian \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact