Skip to main content
Module

x/ramda/invert.js

:ram: Practical functional Javascript
Very Popular
Go to Latest
File
import _curry1 from './internal/_curry1';import _has from './internal/_has';import keys from './keys';

/** * Same as [`R.invertObj`](#invertObj), however this accounts for objects with * duplicate values by putting the values into an array. * * @func * @memberOf R * @since v0.9.0 * @category Object * @sig {s: x} -> {x: [ s, ... ]} * @param {Object} obj The object or array to invert * @return {Object} out A new object with keys in an array. * @see R.invertObj * @example * * const raceResultsByFirstName = { * first: 'alice', * second: 'jake', * third: 'alice', * }; * R.invert(raceResultsByFirstName); * //=> { 'alice': ['first', 'third'], 'jake':['second'] } */var invert = _curry1(function invert(obj) { var props = keys(obj); var len = props.length; var idx = 0; var out = {};
while (idx < len) { var key = props[idx]; var val = obj[key]; var list = _has(val, out) ? out[val] : (out[val] = []); list[list.length] = key; idx += 1; } return out;});export default invert;