Ramda was a huge inspiration for Tinkoff Utils! it has a lot of similarities with naming style, uses same functional programming approach and many other things, with lack of some less popular design ideas like __ prefixes, lenses and etc
| Ramda | Utils |
|---|---|
| R.all | /array/all |
| R.allPass | /function/allPass |
| R.always | /function/always |
| R.any | /array/any |
| R.anyPass | /function/anyPass |
| R.both | /function/both |
| R.clone | /clone |
| R.complement | /function/complement |
| R.compose | /function/compose |
| R.composeP | /function/composeP |
| R.concat | /array/concat |
| R.cond | /function/cond |
| R.contains | /array/includes |
| R.curry | /function/curry (__ not supported) |
| R.curryN | /function/curryN |
| R.defaultTo | /defaultTo |
| R.difference | /array/difference |
| R.dropWhile | /array/dropWhile |
| R.either | /function/either |
| R.empty | /is/empty |
| R.equals | /is/equal |
| R.endsWith | /string/endsWith |
| R.F | /function/F |
| R.filter | /array/filter |
| R.find | /array/find |
| R.findIndex | /array/findIndex |
| R.flatten | /array/flatten |
| R.flip | /function/flip |
| R.forEach | /array/each |
| R.forEachObjIndexed | /object/each |
| R.fromPairs | /object/fromPairs |
| R.groupBy | /object/groupBy |
| R.has | /object/has |
| R.head | /array/head |
| R.identity | /function/identity |
| R.ifElse | /function/ifElse |
| R.intersection | /array/intersection |
| R.is | /is/* |
| R.isEmpty | /is/empty |
| R.isNil | /is/nil |
| R.join | /array/join |
| R.keys | /object/keys |
| R.last | /array/last |
| R.length | /array/length |
| R.map | /array/map |
| R.mapObjIndexed | /object/map |
| R.maxBy | /array/maxBy |
| R.merge | /object/merge (accepts n arguments, bot not less than 2) |
| R.mergeAll | /object/merge (accepts an argument list not an array of arguments) |
| R.mergeDeepLeft | /object/mergeDeep |
| R.mergeWith | /object/mergeWith |
| R.negate | /negate |
| R.not | /not |
| R.nth | /array/nth |
| R.objOf | /object/objOf |
| R.omit | /object/omit |
| R.once | /function/once |
| R.path | /object/path |
| R.pathEq | /object/pathEq |
| R.pathOr | /object/pathOr Note order of arguments is different (Utils always accepts path as first argument) |
| R.pathSatisfies | /object/pathApply |
| R.pick | /object/pick |
| R.pickBy | /object/pickBy |
| R.pipe | /object/compose (prefer to use compose) |
| R.prop | /object/prop |
| R.propEq | /object/propEq |
| R.propOr | /object/propOr Note order of arguments is different (Utils always accepts prop name as first argument) |
| R.propApply | /object/propApply |
| R.range | /array/range |
| R.reduce | /array/reduce, /object/reduce |
| R.reduceWhile | /array/reduceWhile |
| R.reject | /array/reject |
| R.repeat | /array/repeat |
| R.replace | /string/replace |
| R.sort | /array/sort |
| R.sortBy | /array/sortBy |
| R.split | /string/split |
| R.startsWith | /string/startsWith |
| R.sum | /array/sum |
| R.tail | /array/tail |
| R.take | /array/take |
| R.tap | /function/tap |
| R.test | /string/test |
| R.toLower | /string/toLower |
| R.toPairs | /object/toPairs |
| R.toString | /string/toString |
| R.toUpper | /string/toUpper |
| R.trim | /string/trim |
| R.type | /type |
| R.uniq | /array/uniq |
| R.uniqBy | /array/uniqBy |
| R.values | /object/values |
| R.when | /function/when |
| R.where | /object/where |
| R.zip | /array/zip |
| R.zipWith | /array/zipWith |
| R.comparator | /function/comparator |
| R.indexOf | /array/indexOf |
| R.adjust | /array/adjust |
| R.append | /array/append |
| R.slice | /array/slice |
| R.drop | /array/drop |
| R.dropLast | /array/dropLast |
| R.remove | /array/remove |
| R.update | /array/update |
| R.without | /array/without |
When migrating from lodash to Utils, keep in mind that –
- Lodash has different function signatures, since Utils uses data as the last argument in contrast with lodash
- Singular lodash methods can accept various argument types when Utils functions are focused and cohesive
- Some Lodash functions mutate passed arguments
| Lodash | Utils |
|---|---|
| _.compact | /array/filter + /function/identity filter(identity) |
| _.concat | /array/concat |
| _.difference | /array/difference |
| _.dropWhile | /array/dropWhile |
| _.findIndex | /array/findIndex |
| _.first | /array/head |
| _.flattenDeep | /array/flatten |
| _.fromPairs | /object/fromPairs |
| _.intersection | /array/intersection |
| _.join | /array/join |
| _.last | /array/last |
| _.nth | /array/nth |
| _.pull* | pull* mutates array, if there no need in it, then /array/filter + /function/* |
| _.remove | mutates date, otherwise /array/filter + /function/* |
| _.reverse | /array/reverse |
| _.take | /array/take |
| _.uniq | /array/uniq |
| _.uniqBy | /array/uniqBy |
| _.without | /array/filter + /function/* |
| _.zip | /array/zip |
| _.zipWith | /array/zipWith |
| _.each | /array/each, /object/each |
| _.forEach | /array/each, /object/each |
| _.every | /array/all |
| _.find | /array/find |
| _.groupBy | /object/groupBy |
| _.includes | /array/includes |
| _.keyBy | /object/keyBy |
| _.map | /array/map, /object/map |
| _.partition | /array/partition |
| _.reduce | /array/reduce, /object/reduce |
| _.reject | /array/filter + /not filter(not) |
| _.shuffle | /array/shuffle |
| _.some | /array/any |
| _.sortBy | /array/sortBy |
| _.curry | /function/curry |
| _.debounce | /function/debounce |
| _.flip | /function/flip |
| _.negate | /function/complement |
| _.once | /function/once |
| _.thtottle | /function/throttle |
| _.castArray | /array/toArray |
| _.clone | Object.assign({}, x) |
| _.cloneDeep | /clone |
| _.is* | /is/* a small part |
| _.assign | Object.assign |
| _.at | /array/map + /object/path |
| _.defaults | /object/merge |
| _.defaultsDeep | /object/mergeDeep |
| _.entries | /object/toPairs |
| _.forOwn | /object/each |
| _.get | /object/path, /object/pathOr get(obj, 'a.b[0].c', 'dflt') => pathOr(['a', 'b', 0, 'c'], 'dflt', obj) |
| _.has | /object/has |
| _.keys | /object/keys |
| _.mapKeys | /object/reduce + specific function |
| _.mapValues | /object/map |
| _.merge | /object/mergeDeep |
| _.omit | /object/omit |
| _.pick | /object/pick |
| _.pickBy | /object/pickBy |
| _.result | /object/pathApply + /function/applyOrReturn `result(obj, 'a.b', 'dflt') => pathApply(['a', 'b'], applyOrReturn, obj) |
| _.set | /object/pathSet set(obj, 'a.b[0]', 'val') => newObj = pathSet(['a', 'b', 0], 'val', obj) |
| _.toPairs | /object/toPairs |
| _.values | /object/values |
| _.tap | /function/tap |
| _.capitalize | /string/capitalize |
| _.endsWith | /string/endsWith |
| _.escape | /string/escape |
| _.escapeRegExp | /string/escapeRegExp |
| _.repeat | /array/repeat + /array/join |
| _.replace | /string/replace |
| _.split | /string/split |
| _.toLower | /string/toLower |
| _.toUpper | /string/toUpper |
| _.trim | /string/trim |
| _.trimStart | /string/trimLeft |
| _.unescape | /string/unescape |
| _.cond | /function/cond |
| _.conforms | /object/where |
| _.constant | /function/always |
| _.defaultTo | /defaultTo |
| _.identity | /function/identity |
| _.noop | /function/noop |
| _.range | /array/range |
| _.stub* | /function/always |
| _.uniqueId | /uniqueId |