Learn Advanced Array Methods by Building a Statistics Calculator - Step 36

Tell us what’s happening:

I find the instructions confusing. The instructions say to pass in declaring a set into the if condition, but I’m having trouble with it.

Your code so far

<!-- file: index.html -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="stylesheet" href="./styles.css" />
    <script src="./script.js"></script>
    <title>Statistics Calculator</title>
  </head>
  <body>
    <h1>Statistics Calculator</h1>
    <p>Enter a list of comma-separated numbers.</p>
    <form onsubmit="calculate(); return false;">
      <label for="numbers">Numbers:</label>
      <input type="text" name="numbers" id="numbers" />
      <button type="submit">Calculate</button>
    </form>
    <div class="results">
      <p>
        The <dfn>mean</dfn> of a list of numbers is the average, calculated by
        taking the sum of all numbers and dividing that by the count of numbers.
      </p>
      <p class="bold">Mean: <span id="mean"></span></p>
      <p>
        The <dfn>median</dfn> of a list of numbers is the number that appears in
        the middle of the list, when sorted from least to greatest.
      </p>
      <p class="bold">Median: <span id="median"></span></p>
      <p>
        The <dfn>mode</dfn> of a list of numbers is the number that appears most
        often in the list.
      </p>
      <p class="bold">Mode: <span id="mode"></span></p>
      <p>
        The <dfn>range</dfn> of a list of numbers is the difference between the
        largest and smallest numbers in the list.
      </p>
      <p class="bold">Range: <span id="range"></span></p>
      <p>
        The <dfn>variance</dfn> of a list of numbers measures how far the values
        are from the mean, on average.
      </p>
      <p class="bold">Variance: <span id="variance"></span></p>
      <p>
        The <dfn>standard deviation</dfn> of a list of numbers is the square
        root of the variance.
      </p>
      <p class="bold">
        Standard Deviation: <span id="standardDeviation"></span>
      </p>
    </div>
  </body>
</html>
/* file: styles.css */
body {
  margin: 0;
  background-color: rgb(27, 27, 50);
  text-align: center;
  color: #fff;
}

button {
  cursor: pointer;
  background-color: rgb(59, 59, 79);
  border: 3px solid white;
  color: white;
}

input {
  background-color: rgb(10, 10, 35);
  color: white;
  border: 1px solid rgb(59, 59, 79);
}

.bold {
  font-weight: bold;
}
/* file: script.js */
const getMean = (array) => array.reduce((acc, el) => acc + el, 0) / array.length;

const getMedian = (array) => {
  const sorted = array.sort((a, b) => a - b);
  const median =
    array.length % 2 === 0
      ? getMean([sorted[array.length / 2], sorted[array.length / 2 - 1]])
      : sorted[Math.floor(array.length / 2)];
  return median;
}


// User Editable Region

const getMode = (array) => {
  const counts = {};
  array.forEach(el => counts[el] = (counts[el] || 0) + 1);
  let countSet = new Set(Object.values(counts));
  if (countSet.size === 1) {
    return null;
  }
}

// User Editable Region



const calculate = () => {
  const value = document.querySelector("#numbers").value;
  const array = value.split(/,\s*/g);
  const numbers = array.map(el => Number(el)).filter(el => !isNaN(el));
  
  const mean = getMean(numbers);
  const median = getMedian(numbers);

  document.querySelector("#mean").textContent = mean;
  document.querySelector("#median").textContent = median;
}

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36

Challenge Information:

Learn Advanced Array Methods by Building a Statistics Calculator - Step 36

The lesson reads,

Start by creating an if statement. In the condition, create a Set with new Set() and pass it the Object.values() of your counts object.

and the feedback provided using your code is,

Your if statement should create a new Set and pass the Object.values() of your counts object.

So try to do it without declaring a new variable for the Set.

Here’s my code on doing it without creating a new set:

const getMode = (array) => {
  const counts = {};
  array.forEach(el => counts[el] = (counts[el] || 0) + 1);
  if (Object.values(counts).size === 1) {
    return null;
  }
}

You need to instantiate a new Set the way you did before, but do not assign it to a newly declared variable, instead do so directly inside the if block

Your if statement should create a new Set

Here’s the edited if statement:

  if (Object.values(counts).size === 1) {
    Set = new Set(Object.values(counts));
    return null;
  }

I seem to have trouble with what goes in the condition of the if statement.

These are the instructions for the condition:

In the condition, create a Set with new Set() and pass it the Object.values() of your counts object.

It doesn’t look like you are following this

Does it mean if (Set = new Set(Objects.values(counts))? It might be that.

there is no mention of assignment. Also you should never assign to Set, you break things

It finally worked. I finally got it.

1 Like

Thanks for the encouragement. I surely can do it.

1 Like

hey @kudoyukiyoshi

It is great that you solved the challenge, but instead of posting your full working solution, it is best to stay focused on answering the original poster’s question(s) and help guide them with hints and suggestions to solve their own issues with the challenge.

We are trying to cut back on the number of spoiler solutions found on the forum and instead focus on helping other campers with their questions and definitely not posting full working solutions.

1 Like

Sorry for my inappropriate post…

@ilenia
I struggled with this solution and managed to get the correct and posted the almost correct answer out of sheer joy.

I will take care to be able to post hints, from then on.

Thanks for the reply.

(Sorry for my poor English.)

const getMode = (array) => {
const counts = {};
array.forEach(el => counts[el] = (counts[el] || 0) + 1)
if (new Set(Object.values(counts)).size === 1) {
return null;
}
}