Finish the Function: Data transformations
const sum = (...nums) => nums.reduce((accum, x) => accum + x, 0);
const joinStrings = (...strings) => strings.reduce((accum, s) => accum + s, '');
const joinArrays = (...lists) => list.reduce((accum, x) => [...accum, ...x], []);
const mergeObjects = (...objs) => objs.reduce((accum, x) => ({ ...accum, ...x }), {});
const objFromPairs = (...pairs) => pairs.reduce((accum, [k, v]) => ({ ...accum, [k]: v }), {});
const pairsFromObj = obj => Object.entries(obj);
const map = (fn, list) => list.reduce((accum, x) => ([ ...accum, fn(x) ]), []);
const filter = (fn, list) => list.reduce((accum, x) => fn(x) ? [...accum, x] : accum, []);
Strings to Object of Numbers
const strsToObj = (...strs) => strs.reduce((obj, str) => ({ ...obj, [str]: 0 }), {});
const reverseKeys = obj => Object.entries(obj).reduce(
(accum, [k, v]) => ({
...accum,
[k.split('').reverse().join('')]: v
}),
{}
);
const swapKeyValues = obj => Object.entries(obj).reduce(
(accum, [k, v]) => ({ ...accum, [v]: k }),
{}
);
const omitKeys = (keys, obj) => Object.entries(obj).reduce(
(accum, [k, v]) => keys.includes(k)
? accum
: { ...accum, [k]: v },
{}
);
const capitalize = ([firstLetter = '', ...rest] = '') => `${firstLetter.toUpperCase()}${rest.join('')}`;
const mapByProp = (prop, list) => list.reduce(
(accum, obj) => ({ ...accum, [obj[prop]]: obj }),
{}
);
const multiFilter = (fns, list) => list.filter(x => fns.every(fn => fn(x)));