UNPKG

foop

Version:

interfaces that describe their intentions.

53 lines (47 loc) 1.24 kB
const isFunction = require('../../is/function') const isObjTag = require('../../is/objTag') const curry = require('../../fp/curry') const keys = require('../../util/keys') const preAllocate = require('../../array/preAllocate') const reduce = require('./_reduce') /** * @desc `while (index < list.length) push fn(list[index++])` * @name _map * @alias baseMaps * @since 5.0.0-beta.1 * @memberOf loop * * {@link https://github.com/ramda/ramda/blob/master/src/internal/_map.js ramda-_map} * @see {@link ramda-_map} * * @param {Function} fn function to apply * @param {Function|List} functorList function/list * @return {Array} */ function _map(fn, functorList) { let idx = 0 const len = functorList.length const result = preAllocate(len) while (idx < len) { result[idx] = fn(functorList[idx]) idx += 1 } return result } function map(fn, functor) { if (isFunction(functor)) { return curry(functor.length, function() { return fn.call(this, functor.apply(this, arguments)) }) } else if (isObjTag(functor)) { return reduce(function(acc, key) { acc[key] = fn(functor[key]) return acc }, {}, keys(functor)) } else { return _map(fn, functor) } } module.exports = map