1 | export function extremaBy(source, selector, comparer) {
|
2 | let result = [];
|
3 | const it = source[Symbol.iterator]();
|
4 | const { value, done } = it.next();
|
5 | if (done) {
|
6 | throw new Error('Sequence contains no elements');
|
7 | }
|
8 | let resKey = selector(value);
|
9 | result.push(value);
|
10 | let next;
|
11 | while (!(next = it.next()).done) {
|
12 | const current = next.value;
|
13 | const key = selector(current);
|
14 | const cmp = comparer(key, resKey);
|
15 | if (cmp === 0) {
|
16 | result.push(current);
|
17 | }
|
18 | else if (cmp > 0) {
|
19 | result = [current];
|
20 | resKey = key;
|
21 | }
|
22 | }
|
23 | return result;
|
24 | }
|
25 |
|
26 |
|