UNPKG

1.15 kBJavaScriptView Raw
1var _curry1 =
2/*#__PURE__*/
3require("./internal/_curry1");
4
5var _has =
6/*#__PURE__*/
7require("./internal/_has");
8
9var keys =
10/*#__PURE__*/
11require("./keys");
12/**
13 * Same as [`R.invertObj`](#invertObj), however this accounts for objects with
14 * duplicate values by putting the values into an array.
15 *
16 * @func
17 * @memberOf R
18 * @since v0.9.0
19 * @category Object
20 * @sig {s: x} -> {x: [ s, ... ]}
21 * @param {Object} obj The object or array to invert
22 * @return {Object} out A new object with keys in an array.
23 * @see R.invertObj
24 * @example
25 *
26 * const raceResultsByFirstName = {
27 * first: 'alice',
28 * second: 'jake',
29 * third: 'alice',
30 * };
31 * R.invert(raceResultsByFirstName);
32 * //=> { 'alice': ['first', 'third'], 'jake':['second'] }
33 */
34
35
36var invert =
37/*#__PURE__*/
38_curry1(function invert(obj) {
39 var props = keys(obj);
40 var len = props.length;
41 var idx = 0;
42 var out = {};
43
44 while (idx < len) {
45 var key = props[idx];
46 var val = obj[key];
47 var list = _has(val, out) ? out[val] : out[val] = [];
48 list[list.length] = key;
49 idx += 1;
50 }
51
52 return out;
53});
54
55module.exports = invert;
\No newline at end of file