imtbl
imtbl copied to clipboard
Immutable operations for JavaScript data structures
██╗███╗ ███╗████████╗██████╗ ██╗
██║████╗ ████║╚══██╔══╝██╔══██╗██║
██║██╔████╔██║ ██║ ██████╔╝██║
██║██║╚██╔╝██║ ██║ ██╔══██╗██║
██║██║ ╚═╝ ██║ ██║ ██████╔╝███████╗
╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝
Immutable operations for JavaScript data structures
Shamelessly copied from Clojure’s core library
Why?
Because { ...obj, [key]: { ...obj[key], [key1]: f(obj[key][key1]) }} is stupid and sometimes you don't want Immutable.js in your code.
Random benchmark results
updateId 0.7 ms/op 1356 op/s
manual Object.assign 0.6 ms/op 1686 op/s
Installation
npm i imtbl
API
See more usage examples in tests
get(coll, k, notFound)Returns the value mapped tok,notFoundorundefinedifknot present.getIn(coll, ks, notFound)Returns the value in a nested array or object, whereksis an array of keys. Returnsundefinedif the key is not present, or thenotFoundvalue if supplied.assoc(coll, k, v, ...)When applied to an object, returns a new object that contains the mapping of key(s) to val(s). When applied to an array, returns a new array that contains val at index.assocIn(coll, ks, v)Associates a value in a nested array or object, whereksis a sequence of keys andvis the new value and returns a new nested structure. If any levels do not exist, objects will be created.dissoc(coll, k, ...)Returns a new object, that does not contain a mapping for key(s).conj(coll, v, ...)Returns a new array or object with values 'added'.update(coll, k, f, ...args)'Updates' a value in an array or an object, wherekis a key andfis a function that will take the old value and any suppliedargsand return the new value, and returns a new array or object. If the key does not exist,undefinedis passed as the old value.updateIn(coll, ks, f, ...args)'Updates' a value in a nested array or object, whereksis an array of keys andfis a function that will take the old value and any suppliedargsand return the new value, and returns a new nested array or object. If any levels do not exist, objects will be created.