freeCodeCamp/curriculum/challenges/german/10-coding-interview-prep/rosetta-code/averages-mode.md

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;
}