UNPKG

foop

Version:

interfaces that describe their intentions.

74 lines (68 loc) 5.87 kB
var keys = require('../util/keysObjOrArray') var length = require('../util/length') var curry = require('./curry') /** * - Returns a new object with the keys of the given object as values, and the * values of the given object, which are coerced to strings, as keys. Note * that the last key found is preferred when handling the same value. * - Creates an object composed of the inverted keys and values of `object`. * If `object` contains duplicate values, subsequent values overwrite * property assignments of previous values. * * @memberOf fp * @since 5.0.0 * @fork v0.9.0 * * @param {Object} obj The object or array to invert * @return {Object} out A new object * * @func * @category Object * @sig {s: x} -> {x: s} * * {@link https://github.com/jashkenas/underscore/blob/master/underscore.js#L1048 underscore-invert} * {@link https://github.com/kesla/node-invert-object invert-obj-npm} * {@link https://github.com/lodash/lodash/blob/master/invert.js lodash-invert} * {@link https://github.com/ramda/ramda/blob/master/src/invert.js ramda-invert} * {@link https://github.com/ramda/ramda/blob/master/test/invertObj.js ramda-invertobj} * @see {@link ramda-invertobj} * @see {@link ramda-invert} * @see {@link lodash-invert} * @see {@link invert-obj-npm} * @see {@link underscore-invert} * * @example * * const obj = { 'a': 1, 'b': 2, 'c': 1 } * * invert(obj) * //=> { '1': 'c', '2': 'b' } * * @example * * var raceResults = { * first: 'alice', * second: 'jake' * } * invertObj(raceResults) * //=> { 'alice': 'first', 'jake':'second' } * * // Alternatively: * var raceResults = ['alice', 'jake'] * invertObj(raceResults) * //=> { 'alice': '0', 'jake':'1' } * */ module.exports = curry(1, function invertObj(obj) { var props = keys(obj) var out = {} var index = 0 while (index < length(props)) { var key = props[index] // value = key out[obj[key]] = key index++ } return out }) //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52ZXJ0T2JqS2V5VmFsLmpzIiwic291cmNlcyI6WyJpbnZlcnRPYmpLZXlWYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qga2V5cyA9IHJlcXVpcmUoJy4uL3V0aWwva2V5c09iak9yQXJyYXknKVxuY29uc3QgbGVuZ3RoID0gcmVxdWlyZSgnLi4vdXRpbC9sZW5ndGgnKVxuY29uc3QgY3VycnkgPSByZXF1aXJlKCcuL2N1cnJ5JylcblxuLyoqXG4gKiAtIFJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggdGhlIGtleXMgb2YgdGhlIGdpdmVuIG9iamVjdCBhcyB2YWx1ZXMsIGFuZCB0aGVcbiAqICAgdmFsdWVzIG9mIHRoZSBnaXZlbiBvYmplY3QsIHdoaWNoIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MsIGFzIGtleXMuIE5vdGVcbiAqICAgdGhhdCB0aGUgbGFzdCBrZXkgZm91bmQgaXMgcHJlZmVycmVkIHdoZW4gaGFuZGxpbmcgdGhlIHNhbWUgdmFsdWUuXG4gKiAtIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBpbnZlcnRlZCBrZXlzIGFuZCB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gKiAgIElmIGBvYmplY3RgIGNvbnRhaW5zIGR1cGxpY2F0ZSB2YWx1ZXMsIHN1YnNlcXVlbnQgdmFsdWVzIG92ZXJ3cml0ZVxuICogICBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyB2YWx1ZXMuXG4gKlxuICogQG1lbWJlck9mIGZwXG4gKiBAc2luY2UgNS4wLjBcbiAqIEBmb3JrIHYwLjkuMFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCBvciBhcnJheSB0byBpbnZlcnRcbiAqIEByZXR1cm4ge09iamVjdH0gb3V0IEEgbmV3IG9iamVjdFxuICpcbiAqIEBmdW5jXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAc2lnIHtzOiB4fSAtPiB7eDogc31cbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL2Jsb2IvbWFzdGVyL3VuZGVyc2NvcmUuanMjTDEwNDggdW5kZXJzY29yZS1pbnZlcnR9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tlc2xhL25vZGUtaW52ZXJ0LW9iamVjdCBpbnZlcnQtb2JqLW5wbX1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci9pbnZlcnQuanMgbG9kYXNoLWludmVydH1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcmFtZGEvcmFtZGEvYmxvYi9tYXN0ZXIvc3JjL2ludmVydC5qcyByYW1kYS1pbnZlcnR9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3JhbWRhL3JhbWRhL2Jsb2IvbWFzdGVyL3Rlc3QvaW52ZXJ0T2JqLmpzIHJhbWRhLWludmVydG9ian1cbiAqIEBzZWUge0BsaW5rIHJhbWRhLWludmVydG9ian1cbiAqIEBzZWUge0BsaW5rIHJhbWRhLWludmVydH1cbiAqIEBzZWUge0BsaW5rIGxvZGFzaC1pbnZlcnR9XG4gKiBAc2VlIHtAbGluayBpbnZlcnQtb2JqLW5wbX1cbiAqIEBzZWUge0BsaW5rIHVuZGVyc2NvcmUtaW52ZXJ0fVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICAgIGNvbnN0IG9iaiA9IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9XG4gKlxuICogICAgIGludmVydChvYmopXG4gKiAgICAgLy89PiB7ICcxJzogJ2MnLCAnMic6ICdiJyB9XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciByYWNlUmVzdWx0cyA9IHtcbiAqICAgICAgICBmaXJzdDogJ2FsaWNlJyxcbiAqICAgICAgICBzZWNvbmQ6ICdqYWtlJ1xuICogICAgICB9XG4gKiAgICAgIGludmVydE9iaihyYWNlUmVzdWx0cylcbiAqICAgICAgLy89PiB7ICdhbGljZSc6ICdmaXJzdCcsICdqYWtlJzonc2Vjb25kJyB9XG4gKlxuICogICAgICAvLyBBbHRlcm5hdGl2ZWx5OlxuICogICAgICB2YXIgcmFjZVJlc3VsdHMgPSBbJ2FsaWNlJywgJ2pha2UnXVxuICogICAgICBpbnZlcnRPYmoocmFjZVJlc3VsdHMpXG4gKiAgICAgIC8vPT4geyAnYWxpY2UnOiAnMCcsICdqYWtlJzonMScgfVxuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjdXJyeSgxLCBmdW5jdGlvbiBpbnZlcnRPYmoob2JqKSB7XG4gIGNvbnN0IHByb3BzID0ga2V5cyhvYmopXG4gIGNvbnN0IG91dCA9IHt9XG4gIGxldCBpbmRleCA9IDBcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgocHJvcHMpKSB7XG4gICAgY29uc3Qga2V5ID0gcHJvcHNbaW5kZXhdXG5cbiAgICAvLyB2YWx1ZSA9IGtleVxuICAgIG91dFtvYmpba2V5XV0gPSBrZXlcblxuICAgIGluZGV4KytcbiAgfVxuXG4gIHJldHVybiBvdXRcbn0pXG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztBQUM5Q0EsR0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7QUFDeENBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0RoQyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFO0VBQ2hEQSxHQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDdkJBLEdBQUssQ0FBQyxHQUFHLEdBQUcsRUFBRTtFQUNkQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUM7O0VBRWIsT0FBTyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQzVCRCxHQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7OztJQUd4QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRzs7SUFFbkIsS0FBSyxFQUFFO0dBQ1I7O0VBRUQsT0FBTyxHQUFHO0NBQ1gsQ0FBQzsifQ==