@blakek/set-operations
v1.0.0
Published
🧮 Common set operations (union, difference, isSubset, etc.) for any Iterable
Downloads
8
Maintainers
Readme
set-operations
🧮 Common set operations (union, difference, isSubset, etc.) for any Iterable
Provides helpers like isSuperset
, difference
, etc. for Iterables.
Install
Using Yarn:
$ yarn add @blakek/set-operations
…or using [npm]:
$ npm i --save @blakek/set-operations
API
import {
difference,
filter,
intersection,
isSubset,
isSuperset,
symmetricDifference,
union
} from '@blakek/set-operations';
difference();
difference
function difference<T>(groupA: Iterable<T>, groupB: Iterable<T>): Iterable<T>;
Returns values in one group not in another:
import { difference } from '@blakek/set-operations';
difference(['a', 'b', 'c'], ['b', 'a']);
// » Set { 'c' }
filter
function filter<T>(group: Set<T>, fn: (value: T) => boolean): Set<T>;
Returns a new Set from all elements in a group matching a filtering function:
import { filter } from '@blakek/set-operations';
filter(new Set([1, 2, 3, 4, 5]), x => x < 4);
// » Set { 1, 2, 3 }
intersection
function intersection<T>(groupA: Iterable<T>, groupB: Iterable<T>): Iterable<T>;
Returns only values shared between groups:
import { intersection } from '@blakek/set-operations';
intersection([4, 5, 6], [5, 6]);
// » Set { 5, 6 }
intersection('showers', 'flowers');
// » Set { 's', 'o', 'w', 'e', 'r' }
isSubset
function isSubset<T>(groupA: Iterable<T>, groupB: Iterable<T>): boolean;
Returns if the first group is a subset of the second:
import { isSubset } from '@blakek/set-operations';
isSubset([4, 5, 6], [5, 6]);
// » false
isSubset([2, 4, 6], [1, 2, 3, 4, 5, 6]);
// » true
isSubset('fame', 'frame');
// » true
isSuperset
function isSuperset<T>(groupA: Iterable<T>, groupB: Iterable<T>): boolean;
Returns if the first group is a superset of the second:
import { isSuperset } from '@blakek/set-operations';
isSuperset([4, 5, 6], [5, 6]);
// » true
isSuperset([2, 4, 6], [1, 2, 3, 4, 5, 6]);
// » false
isSuperset('fame', 'frame');
// » false
symmetricDifference
function symmetricDifference<T>(
groupA: Iterable<T>,
groupB: Iterable<T>
): Iterable<T>;
Returns values in either group not in both:
import { symmetricDifference } from '@blakek/set-operations';
symmetricDifference([2, 4, 6], [1, 2, 3, 4, 5, 6]);
// » Set { 1, 3, 5 }
symmetricDifference('shower', 'flower');
// » Set { 's', 'h', 'f', 'l' }
union
function union<T>(groupA: Iterable<T>, groupB: Iterable<T>): Iterable<T>;
Returns all values from each group:
import { union } from '@blakek/set-operations';
union([2, 4, 6], [1, 2, 3, 4, 5, 6]);
// » Set { 2, 4, 6, 1, 3, 5 }
union('fun', 'sun');
// » Set { 'f', 'u', 'n', 's' }
Contributing
Node.js and Yarn are required to work with this project.
To install all dependencies, run:
yarn
Then, you can start the test server to get started:
yarn test --watch
See below for other scripts.
Useful Commands
| | |
| ------------------- | ----------------------------------------------- |
| yarn build
| Builds the project to ./dist
|
| yarn format
| Format the source following the Prettier styles |
| yarn test
| Run project tests |
| yarn test --watch
| Run project tests, watching for file changes |
License
MIT