https://github.com/bitoiu/venn
Fluent API for set operations.
https://github.com/bitoiu/venn
fluent-api intersection javascript union venn
Last synced: 10 months ago
JSON representation
Fluent API for set operations.
- Host: GitHub
- URL: https://github.com/bitoiu/venn
- Owner: bitoiu
- Created: 2013-04-29T20:52:39.000Z (almost 13 years ago)
- Default Branch: master
- Last Pushed: 2022-12-30T17:14:59.000Z (about 3 years ago)
- Last Synced: 2025-04-30T14:29:53.556Z (10 months ago)
- Topics: fluent-api, intersection, javascript, union, venn
- Language: JavaScript
- Homepage: http://bitoiu.github.io/venn
- Size: 675 KB
- Stars: 9
- Watchers: 1
- Forks: 4
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# venn
[](http://badge.fury.io/js/venn)
## Motivation
One of these days I was looking for a library that would allow me to do simple set operations, mostly intersection and union. There's a lot of libraries that do this but I didn't find one with a fluent API. This a stab at one:
Compatible with AMD and node.
### getting started
A venn set is just an array on steroids:
```javascript
var venn = require("venn")
venn.create([1,2])
console.log(venn) // [1,2]
```
### union
You can now chain operations to this set, using `union` or `or`:
```javascript
venn.create([1,2])
.union([1,2,3,4])
.or([5]) // [1,2,3,4,5]
```
`union` and `or` are just alias for the same operation.
### intersection
```javascript
venn.create([1,2])
.union([1,2,3,4])
.intersection([1,5]) // [1]
```
if you prefer you can also use `and` instead of `intersection`
### not
If you want to be negative about it, you can check out `not`
```javascript
venn.create([1,2,3,4,5])
.not([4])
.not([5]) // [1,2,3]
```
### chaining everything
Or a mix of everything
```javascript
venn.create([1,2])
.or([1,2,3,4,5])
.and([1,5])
.or([2]) // [1,5,2]
```
### Objects
If you're crazy you can use venn without a key function. We'll just figure it out how to index the objects.
```javascript
venn.create([
{name: "vitor", age: "23"}
, {name: "khov", age: "24"}
, {name: "pat", age: "30"}])
.intersection([
{name: "vitor", age: "23"}
, {name: "newguy", age: "0"}
, {name: "pat", age: "50"}])
.union([
{name: "khov", age : "10"}
, {name: "nuno", age : "20"}])
// vitor, khov and nuno
```
### Key function
But really, write your own key function:
```javascript
var myKeyFunction = function(item) {
return item.name
}
venn.create([
{name: "vitor", age: "100"}
, {name: "khov", age: "100"}], myKeyFunction)
.and([
{name: "vitor", age: "0"}
, {name: "khov", age: "0"}
.or([
{name: "khov", age : "-100"}
, {name: "nuno", age : "20"}])
// vitor, khov(the first of them), nuno
```
### Some notes
* The keyFunction only needs to be set once for each venn object (as you would expect)
* Don't forget if you apply a built-in array function like `filter` or `map` the returning object is not a venn object (as you would once again expect)
Let me know if there are improvements I can do to the library. I might take some time to implement the other less used set operations.