Giter VIP home page Giter VIP logo

big-cartesian's Introduction

Codecov Build Node Twitter Medium

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 use fast-cartesian instead as it is much faster.

Example

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' ]

Demo

You can try this library:

Install

npm install big-cartesian

This package is an ES module and must be loaded using an import or import() statement, not require().

API

bigCartesian(inputs)

inputs: Array<Array | Iterable | Generator>
Return value: Iterable<Array>

Iterates over each combination of inputs.

Limits

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.

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)
}

Benchmarks

See the following benchmarks.

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
ehmicky

๐Ÿ’ป ๐ŸŽจ ๐Ÿค” ๐Ÿ“–

big-cartesian's People

Contributors

dependabot[bot] avatar ehmicky avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.