30 lines
675 B
JavaScript
30 lines
675 B
JavaScript
import ascending from "./ascending.js";
|
|
|
|
export default function greatest(values, compare = ascending) {
|
|
let max;
|
|
let defined = false;
|
|
if (compare.length === 1) {
|
|
let maxValue;
|
|
for (const element of values) {
|
|
const value = compare(element);
|
|
if (defined
|
|
? ascending(value, maxValue) > 0
|
|
: ascending(value, value) === 0) {
|
|
max = element;
|
|
maxValue = value;
|
|
defined = true;
|
|
}
|
|
}
|
|
} else {
|
|
for (const value of values) {
|
|
if (defined
|
|
? compare(value, max) > 0
|
|
: compare(value, value) === 0) {
|
|
max = value;
|
|
defined = true;
|
|
}
|
|
}
|
|
}
|
|
return max;
|
|
}
|