Learn Functional Programming by Building a Spreadsheet - Step 25

Tell us what’s happening:

It is sayin I need to pass an array into my average function, where is my mistake?

Your code so far

const median = nums => {
  const sorted = nums.slice().sort((a, b) => a - b);
  const length = sorted.length;
  const middle = length / 2 - 1;
  return isEven(length) ? average(nums) : sorted[Math.ceil(middle)]; 
}
<!-- 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" />
    <title>Functional Programming Spreadsheet</title>
  </head>
  <body>
    <div id="container">
      <div></div>
    </div>
    <script src="./script.js"></script>
  </body>
</html>
/* file: styles.css */
#container {
  display: grid;
  grid-template-columns: 50px repeat(10, 200px);
  grid-template-rows: repeat(11, 30px);
}

.label {
  background-color: lightgray;
  text-align: center;
  vertical-align: middle;
  line-height: 30px;
}
/* file: script.js */
const isEven = num => num % 2 === 0;
const sum = nums => nums.reduce((acc, el) => acc + el, 0);
const average = nums => sum(nums) / nums.length;


// User Editable Region

const median = nums => {
  const sorted = nums.slice().sort((a, b) => a - b);
  const length = sorted.length;
  const middle = length / 2 - 1;
  return isEven(length) ? average(nums) : sorted[Math.ceil(middle)]; 
}

// User Editable Region


const range = (start, end) => Array(end - start + 1).fill(start).map((element, index) => element + index);
const charRange = (start, end) => range(start.charCodeAt(0), end.charCodeAt(0)).map(code => String.fromCharCode(code));

window.onload = () => {
  const container = document.getElementById("container");
  const createLabel = (name) => {
    const label = document.createElement("div");
    label.className = "label";
    label.textContent = name;
    container.appendChild(label);
  }
  const letters = charRange("A", "J");
  letters.forEach(createLabel);
  range(1, 99).forEach(number => {
    createLabel(number);
    letters.forEach(letter => {
      const input = document.createElement("input");
      input.type = "text";
      input.id = letter + number;
      input.ariaLabel = letter + number;
      container.appendChild(input);
    })
  })
}

Your browser information:

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

Challenge Information:

Learn Functional Programming by Building a Spreadsheet - Step 25

average(nums) is not what is required here:
You should pass an array [] to the ‘average’ function with two values as arguments. The first is the middle of the ‘sorted’ array, and the second is the middle + 1 of the ‘sorted’ array:

function([array.[first_value], array.[second_value]])

return isEven(length)
? average(sorted[middle], sorted[middle+1])
: sorted[Math.ceil(middle)];
}
I’ve came up with this but im still misunderstanding and getting the same message.

1 Like

that works return isEven(length) ? average([sorted[middle], sorted[middle + 1]]):sorted[Math.ceil(middle)];

That’s exactly the same line of code I use, but I get an error saying that I should use the return keyword. I’ve been trying since yesterday on this, am really lost.

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.