29 lines
708 B
JavaScript
29 lines
708 B
JavaScript
import {InternMap} from "internmap";
|
|
|
|
export default function mode(values, valueof) {
|
|
const counts = new InternMap();
|
|
if (valueof === undefined) {
|
|
for (let value of values) {
|
|
if (value != null && value >= value) {
|
|
counts.set(value, (counts.get(value) || 0) + 1);
|
|
}
|
|
}
|
|
} else {
|
|
let index = -1;
|
|
for (let value of values) {
|
|
if ((value = valueof(value, ++index, values)) != null && value >= value) {
|
|
counts.set(value, (counts.get(value) || 0) + 1);
|
|
}
|
|
}
|
|
}
|
|
let modeValue;
|
|
let modeCount = 0;
|
|
for (const [value, count] of counts) {
|
|
if (count > modeCount) {
|
|
modeCount = count;
|
|
modeValue = value;
|
|
}
|
|
}
|
|
return modeValue;
|
|
}
|