1.4 KiB
1.4 KiB
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
594d8d0ab97724821379b1e6 | Averages/Mode | 1 | 302226 | averagesmode |
--description--
Write a function mode
to find the value that appears most in an array.
The case where the collection is empty may be ignored. Care must be taken to handle the case where the mode is non-unique.
If it is not appropriate or possible to support a general collection, use a vector (array), if possible. If it is not appropriate or possible to support an unspecified value type, use integers.
--hints--
mode
should be a function.
assert(typeof mode === 'function');
mode([1, 3, 6, 6, 6, 6, 7, 7, 12, 12, 17])
should equal [6]
assert.deepEqual(mode(arr1), [6]);
mode([1, 2, 4, 4, 1])
should equal [1, 4]
.
assert.deepEqual(mode(arr2).sort(), [1, 4]);
--seed--
--after-user-code--
const arr1 = [1, 3, 6, 6, 6, 6, 7, 7, 12, 12, 17];
const arr2 = [1, 2, 4, 4, 1];
--seed-contents--
function mode(arr) {
return true;
}
--solutions--
function mode(arr) {
const counter = {};
let result = [];
let max = 0;
// for (const i in arr) {
arr.forEach(el => {
if (!(el in counter)) {
counter[el] = 0;
}
counter[el]++;
if (counter[el] === max) {
result.push(el);
}
else if (counter[el] > max) {
max = counter[el];
result = [el];
}
});
return result;
}