UNPKG

foreword

Version:

A JavaScript library for functional data transformation

94 lines (77 loc) 1.69 kB
const curry = require('./curry') function concat (arr) { return arr.reduce((acc, a) => Object.assign(acc, a), {}) } function every (a, b) { return Object.keys(a).every(k => { return includes(k, b) ? a[k](b[k]) : false }) } function filter (keys, obj) { return keys.reduce((acc, k) => { return Object.assign(acc, { [k]: obj[k] }) }, {}) } function find ([key, ...rest], obj) { if (!rest.length) { return obj[key] } if (obj[key] == null) { return undefined } return find(rest, obj[key]) } function get (k, obj) { return obj[k] } function gets (keys, obj) { return keys.map(k => obj[k]) } function includes (k, obj) { return Object.prototype.hasOwnProperty.call(obj, k) } function isEmpty (obj) { return !Object.keys(obj).length } function length (obj) { return Object.keys(obj).length } function map (a, b) { return Object.assign({}, b, Object.keys(a).reduce((acc, k) => { return !includes(k, b) ? acc : Object.assign(acc, { [k]: a[k](b[k]) }) }, {})) } function reject (keys, obj) { return Object.keys(obj).reduce((acc, k) => { return keys.includes(k) ? acc : Object.assign(acc, { [k]: obj[k] }) }, {}) } function some (a, b) { return Object.keys(a).some(k => { return includes(k, b) ? a[k](b[k]) : false }) } function update (a, b) { return Object.assign({}, b, a) } module.exports = { concat, every: curry(2, every), filter: curry(2, filter), find: curry(2, find), get: curry(2, get), gets: curry(2, gets), includes: curry(2, includes), isEmpty, length, map: curry(2, map), reject: curry(2, reject), some: curry(2, some), update: curry(2, update) }