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