1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.sortBy = exports.maxBy = exports.pickBy = void 0;
|
4 | function pickBy(obj, fn) {
|
5 | return Object.entries(obj)
|
6 | .reduce((o, [k, v]) => {
|
7 | if (fn(v))
|
8 | o[k] = v;
|
9 | return o;
|
10 | }, {});
|
11 | }
|
12 | exports.pickBy = pickBy;
|
13 | function maxBy(arr, fn) {
|
14 | let max;
|
15 | for (const cur of arr) {
|
16 | const i = fn(cur);
|
17 | if (!max || i > max.i) {
|
18 | max = { i, element: cur };
|
19 | }
|
20 | }
|
21 | return max && max.element;
|
22 | }
|
23 | exports.maxBy = maxBy;
|
24 | function sortBy(arr, fn) {
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | function compare(a, b) {
|
32 | a = a === undefined ? 0 : a;
|
33 | b = b === undefined ? 0 : b;
|
34 | if (Array.isArray(a) && Array.isArray(b)) {
|
35 | if (a.length === 0 && b.length === 0)
|
36 | return 0;
|
37 | const diff = compare(a[0], b[0]);
|
38 | if (diff !== 0)
|
39 | return diff;
|
40 | return compare(a.slice(1), b.slice(1));
|
41 | }
|
42 | if (a < b)
|
43 | return -1;
|
44 | if (a > b)
|
45 | return 1;
|
46 | return 0;
|
47 | }
|
48 | return arr.sort((a, b) => compare(fn(a), fn(b)));
|
49 | }
|
50 | exports.sortBy = sortBy;
|