Warning: API Unstable (even more so than most < 1.0.0 releases)
Persistent
Persistent data-structures from the comfort of JavaScript - a lá clojure. Based on Bagwell (2001), and Clojure's persistent implementation of a Hash Array Mapped Trie.
Why?
Mutability causes headaches; immutability soothes them. JavaScript's Object and Array are crying out for immutable counterparts to complement first-class functions.
Example
var p = person = p var personWithAge = person person //= falsepersonWithAge //= truepersonWithAge //= 24
Install
npm install persistent
persistent.dict([Object]) -> dict
Creates an empty dict, or sets the attributes if an object is passed.
var o = p // orvar you = p
.set(String, Value) OR .set(Object) -> dict
Returns a new dict with the additional attribute(s).
var o = p var changed = o changed //= truechanged //= 4
.get(String) -> value
Gets an attribute.
var o = p o //= 3
.has(String) -> Boolean
Returns true or false; same as key in object
for regular objects:
var o = p o //= trueo //= false
alias: .delete(String)
-> dict
.remove(String) Returns a new dict
with the key removed.
var o = p var updated = oupdated //= falseo //= true
.transient() -> dict
Returns a seperate, mutable object with the same attrs.
var o = p var trans = odelete transfoo o //= true
persistent.list(Array) -> array
Shares the same API as persistent.dict
, except:
persistent.transient() -> array
Returns a seperate, mutable array with the same attrs.
var arr1 = p arr2 = arr1 arr2 arr11 !== arr21 //= true
Native Methods
The following native methods return a new instance of p.list:
- map
- sort
- filter
- splice
- slice
- reverse
- concat
- pop
- push
- shift
- unshift
The following native methods work as expected for a regular array:
- toString
- toLocaleString
- join
- forEach
- indexOf
- lastIndexOf
- every
- some
- reduce
- reduceRight