@team-griffin/capra
v2.0.0
Published
Common utilities
Downloads
8
Keywords
Readme
@team-griffin/capra
We can do a lot of cool stuff with the latest ES spec. Rest/spread, Object.entries, etc. For 90% of what lodash/underscore/ramda provides you can easily accomplish with native javascript now. Capra's aim is just to cover some of the more awkward computations that aren't out-of-the-box yet.
These methods are written for post-IE browsers so they're very small and very performant.
map-obj
(obj: object, fn: (key: strng, value: any) => [ string, any ]): object
Calls fn
with each key
/value
of obj
. Expects a tuple of newKey
/newValue
in order to construct the return object.
before
Object
.entries(obj)
.reduce((acc, [ key, value ]) => {
const [ newKey, newValue ] = fn(key, value);
return {
...acc,
[newKey]: newValue,
};
}, {});
after
mapObj(obj, fn);
filter-obj
(obj: object, fn: (key: string, value: any) => boolean): object
Filters out object properties based on the predecate function.
before
Object
.entries(obj)
.reduce((acc, [ key, value ]) => {
if (fn(key, value)) {
return {
...acc,
[key]: value,
};
} else {
return acc;
}
})
after
filterObj(obj, fn);
invert-obj
(obj: object): object
Inverts the key/value pairs of an object.
before
Object
.entries(obj)
.reduce((acc, [ key, value ]) => {
return {
...acc,
[value]: key,
};
}, {});
after
invertObj(obj);
omit
(obj: object, keys: string[]): object
Omits the given keys from an object.
before
const {
foo,
bah,
...withoutFooBah,
} = obj;
after
const withoutFooBah = omit(obj, [ 'foo', 'bah' ]);
assoc-path
(obj: object, path: string[], value: any): object
Adds a property at a deeply-nested level. This was an ugly mess of spread properties and was hard to do dynamically...
before
{
...obj,
foo: {
...obj?.foo,
bah: {
...obj?.foo?.bah,
baz: 'baz',
},
},
}
after
assocPath(obj, [ 'foo', 'bah', 'baz' ], 'baz');
group-by
(arr: any[], fn: (v: any) => string): object
Groups an array based on the given predecate
before
not really possible with native methods
after
groupBy(arr, (x) => x.category);
is-empty
(a: any): boolean
is-nil-or-empty
(a: any): boolean