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