Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/modules / ___dist / chain-able / src / deps / loop / map / mapObjOrArray.js
Size: Mime:
const ENV_DEBUG = require('../../env/debug')
const isArray = require('../../is/array')
const curry = require('../../fp/curry')
const identity = require('../../fp/identity')
const emptyTarget = require('../../dopemerge/emptyTarget')
const defaultTo = require('../../cast/defaultTo')
const objOrArrayKeys = require('../../util/keysObjOrArray')
const size = require('../../util/size')

// const always = require('../../fp/always')
// pipe(nthArg(2), always)
const defaultKeyTransformer = (value, key) => key
const defaultValTransformer = identity

/**
 * @desc maps keys and vals
 *       probably needs a `mapArrayKeyVal` & `mapObjKeyVal`
 *       maybe `mapMap` haha
 *
 * @TODO this is huge perf killer just super easy util
 *
 * https://github.com/jashkenas/underscore/blob/master/underscore.js#L1021 underscore-map-obj
 * @alias mapAny
 * @memberOf loop
 * @since 5.0.0-beta.6
 */
function mapObjOrArray(obj, onValue, onKey, init) {
  const result = defaultTo(emptyTarget(obj), init)
  const valTransformer = defaultTo(defaultValTransformer, onValue)
  const keyTransformer = defaultTo(defaultKeyTransformer, onKey)

  const isArrayObj = isArray(obj)
  const keys = objOrArrayKeys(obj)

  if (ENV_DEBUG) {
    console.log('loop_mapObjOrArray', {keys, result, isArrayObj, obj, init})
  }

  for (let index = 0; index < keys.length; index++) {
    const key = isArrayObj ? index : keys[index]
    const value = obj[key]

    if (ENV_DEBUG) {
      console.log('loop_mapObjOrArray', {key, value, obj, index})
    }

    result[keyTransformer(value, key, obj)] = valTransformer(value, key, obj)
  }

  return result
}

module.exports = curry(2, mapObjOrArray)