██╗███╗ ███╗████████╗██████╗ ██╗
██║████╗ ████║╚══██╔══╝██╔══██╗██║
██║██╔████╔██║ ██║ ██████╔╝██║
██║██║╚██╔╝██║ ██║ ██╔══██╗██║
██║██║ ╚═╝ ██║ ██║ ██████╔╝███████╗
╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝
Immutable operations for JavaScript data structures
Shamelessly copied from Clojure’s core library
Because { ...obj, [key]: { ...obj[key], [key1]: f(obj[key][key1]) }}
is stupid and sometimes you don't want Immutable.js in your code.
updateId 0.7 ms/op 1356 op/s
manual Object.assign 0.6 ms/op 1686 op/s
npm i imtbl
See more usage examples in tests
get(coll, k, notFound)
Returns the value mapped tok
,notFound
orundefined
ifk
not present.getIn(coll, ks, notFound)
Returns the value in a nested array or object, whereks
is an array of keys. Returnsundefined
if the key is not present, or thenotFound
value 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, whereks
is a sequence of keys andv
is 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, wherek
is a key andf
is a function that will take the old value and any suppliedargs
and return the new value, and returns a new array or object. If the key does not exist,undefined
is passed as the old value.updateIn(coll, ks, f, ...args)
'Updates' a value in a nested array or object, whereks
is an array of keys andf
is a function that will take the old value and any suppliedargs
and return the new value, and returns a new nested array or object. If any levels do not exist, objects will be created.