conset
TypeScript icon, indicating that this package has built-in type declarations

2.0.3 • Public • Published

npm

conset.js

An ordered conditional set (you can provide your own hash) for typescript/javascript

Features

  • Provide your own hash function which returns a string. This will be used as the identifier of the item.
  • Maintain order.
  • Newly added values override existing ones and update order.
  • Barebones functional API.
  • compute intersection and union

Usage

import * as conset from 'conset'
 
interface MyItem {
    id:string
    data:any[]
}
 
function myhash(item:MyItem):string {
    return item['id']
}
 
let myset = conset.create(myhash)
 
conset.add(myset, {id: 1, data: ["whatever", "something"]})
conset.add(myset, {id: 2, data: ["something", "whatever"]})
conset.add(myset, {id: 3, data: ["something", "whatever", "balls"]})
 
conset.getItems(myset)
/* 
[
    {id: 1, data: ["whatever", "something"]}
    {id: 2, data: ["something", "whatever"]}
    {id: 3, data: ["something", "whatever", "balls"]}
*/
 
conset.contains(myset, {id: '3'}) 
/*
true
*/
conset.remove(myset, {id: 3}) 
conset.getItems(myset)
/* 
[
    {id: 1, data: ["whatever", "something"]}
    {id: 2, data: ["something", "whatever"]}
*/
 
for(let item of conset.iter(myset)) {
    console.dir(item)
}
/*
{id: 1, data: ["whatever", "something"]}
{id: 2, data: ["something", "whatever"]}
*/
 
var c = conset.create((item) => {return item['a']}, [{a:1}, {a:2}, {a:7}])
var d = conset.create((item) => {return item['a']}, [{a:1}, {a:2}, {a:3}])
conset.getItems(conset.intersect(c,d))
/*
[ { a: 1 }, { a: 2 } ]
*/
var d = conset.create((item) => {return item['a']}, [{a:1}, {a:2}, {a:3}, {a:9}, {a:10}])
var c = conset.create((item) => {return item['a']}, [{a:1}, {a:2}, {a:7}])
conset.getItems(conset.union(c,d))
/*
[ { a: 3 }, { a: 9 }, { a: 10 }, { a: 1 }, { a: 2 }, { a: 7 } ]
*/
>

API overview [TODO use JSDoc for this]

declare type HashFunction<T> = (item: T) => string;
interface Conset<T> {
    map: Object;
    order: string[];
    hashFunction: HashFunction<T>;
}
declare const create: <T>(hashFunction: HashFunction<T>, initialItems?: T[]) => Conset<T>;
declare function iter<T>(conset: Conset<T>): IterableIterator<T>;
declare const remove: <T>(conset: Conset<T>, item: T) => Conset<T>;
declare const add: <T>(conset: Conset<T>, item: T) => Conset<T>;
declare const contains: <T>(conset: Conset<T>, item: T) => boolean;
declare const getItems: <T>(conset: Conset<T>) => T[];
declare const size: <T>(conset: Conset<T>) => number;
declare const intersect: <T>(smaller: Conset<T>, larger: Conset<T>) => Conset<T>;
declare const copy: <T>(conset: Conset<T>) => Conset<T>;
declare const union: <T>(smaller: Conset<T>, larger: Conset<T>) => Conset<T>;

Dependents (0)

Package Sidebar

Install

npm i conset

Weekly Downloads

2

Version

2.0.3

License

MIT

Unpacked Size

10 kB

Total Files

9

Last publish

Collaborators

  • shasak