Repository URL to install this package:
|
Version:
6.0.4 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var is_1 = require("../../is");
var curry_1 = require("../../fp/curry");
var identity_1 = require("../../fp/identity");
var emptyTarget_1 = require("../../dopemerge/emptyTarget");
var keysObjOrArray_1 = require("../../util/keysObjOrArray");
// @@perf @@todo
var defaultTo = curry_1.default(2, function (value, arg) { return (is_1.isNil(arg) ? value : arg); });
// const always = require('../../fp/always')
// pipe(nthArg(2), always)
var defaultKeyTransformer = function (value, key) { return key; };
var defaultValTransformer = identity_1.default;
/**
* @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) {
var result = defaultTo(emptyTarget_1.default(obj), init);
var valTransformer = defaultTo(defaultValTransformer, onValue);
var keyTransformer = defaultTo(defaultKeyTransformer, onKey);
var isArrayObj = is_1.isArray(obj);
var keys = keysObjOrArray_1.default(obj);
if (process.env.DEBUG) {
console.log('loop_mapObjOrArray', { keys: keys, result: result, isArrayObj: isArrayObj, obj: obj, init: init });
}
for (var index = 0; index < keys.length; index++) {
var key = isArrayObj ? index : keys[index];
var value = obj[key];
if (process.env.DEBUG) {
console.log('loop_mapObjOrArray', { key: key, value: value, obj: obj, index: index });
}
result[keyTransformer(value, key, obj)] = valTransformer(value, key, obj);
}
return result;
}
exports.default = curry_1.default(2, mapObjOrArray);
//# sourceMappingURL=mapObjOrArray.js.map