--- id: 6352ec8b9c70fd17b8c7ba3f title: Step 38 challengeType: 0 dashedName: step-38 --- # --description-- Now you need to sort the values properly. Chain the `.sort()` method to your `Object.keys()` call. For the callback, you'll need to use the `counts` object to compare the values of each key. You can use the `a` and `b` parameters to access the keys. Then, return the value of `counts[b]` minus the value of `counts[a]`. Finally, access the first element in the array using bracket notation to complete your `highest` variable. # --hints-- Your `getMode` function should use the `sort` method to sort the `Object.keys()` array. ```js assert.match(getMode.toString(), /highest\s*=\s*Object\.keys\(\s*counts\s*\)\.sort\(/) ``` Your `getMode` function should pass a callback to the `sort` method with parameters `a` and `b`. ```js assert.match(getMode.toString(), /highest\s*=\s*Object\.keys\(\s*counts\s*\)\.sort\(\s*function\s*\(\s*a\s*,\s*b\s*\)/) ``` Your `getMode` function should use the `sort` method to sort the `Object.keys()` array and return the value of `counts[b]` minus the value of `counts[a]`. ```js assert.match(getMode.toString(), /highest\s*=\s*Object\.keys\(\s*counts\s*\)\.sort\(\s*function\s*\(\s*a\s*,\s*b\s*\)\s*\{\s*return\s+counts\s*\[\s*b\s*\]\s*-\s*counts\s*\[\s*a\s*\]\s*;?\s*\}\s*\)/) ``` Your `highest` variable should have the value of the first entry in the sorted `Object.keys(counts)` array. ```js assert.match(getMode.toString(), /highest\s*=\s*Object\.keys\(\s*counts\s*\)\.sort\(\s*function\s*\(\s*a\s*,\s*b\s*\)\s*\{\s*return\s+counts\s*\[\s*b\s*\]\s*-\s*counts\s*\[\s*a\s*\]\s*;?\s*\}\s*\)\s*\[\s*0\s*\]\s*;/) ``` # --seed-- ## --seed-contents-- ```html Statistics Calculator

Statistics Calculator

Enter a list of comma-separated numbers.

The mean of a list of numbers is the average, calculated by taking the sum of all numbers and dividing that by the count of numbers.

Mean:

The median of a list of numbers is the number that appears in the middle of the list, when sorted from least to greatest.

Median:

The mode of a list of numbers is the number that appears most often in the list.

Mode:

The range of a list of numbers is the difference between the largest and smallest numbers in the list.

Range:

The variance of a list of numbers measures how far the values are from the mean, on average.

Variance:

The standard deviation of a list of numbers is the square root of the variance.

Standard Deviation:

``` ```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; } ``` ```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; } --fcc-editable-region-- const getMode = (array) => { const counts = {}; array.forEach((el) => { counts[el] = (counts[el] || 0) + 1; }) if (new Set(Object.values(counts)).size === 1) { return null; } const highest = Object.keys(counts); } --fcc-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; } ```