annie
annie

Reputation: 25

ReferenceError: key is not defined

I am writing an algorithm for a roman numeral converter. This solution works perfectly on my VS Code but gives me the "ReferenceError: key is not defined" error on freeCodeCamp.

function convertToRoman(num) {
  let romanNumerals = {
    M: 1000,
    CM: 900,
    D: 500,
    CD: 400,
    C: 100,
    XC: 90,
    L: 50,
    XL: 40,
    X: 10,
    IX: 9,
    V: 5,
    IV: 4,
    I: 1
  }

  let answer = "";
  let numTemp = num;
  let decimal = 0;
  let remainder = 0;

  if (num == 0) answer = 0;
  if (num > 0)  {
    let romanArr = Object.entries(romanNumerals);
    for ([key, value] of romanArr) {
      if (numTemp / value >= 1) {
        decimal = Math.floor(numTemp / value);
        remainder = numTemp % value;
        answer += key.repeat(decimal);
        numTemp = remainder;
      } 
    }
  }
  return answer;
 }
 
  console.log(convertToRoman(2014));
  console.log(convertToRoman(3999));

I don't know what to do. Can anyone help please?

Upvotes: 0

Views: 839

Answers (1)

Mr. Polywhirl
Mr. Polywhirl

Reputation: 48713

Your loop variables should be declared with const, let, or var.

for (let [key, value] of romanArr) {

By setting strict mode at the top, and removing the declaration, you will see the error you described above:

ReferenceError: key is not defined

The freeCodeCamp editor may set strict mode internally when you execute your snippet.

Working example

'use strict';

function convertToRoman(num) {
  let romanNumerals = {
    M: 1000,
    CM: 900,
    D: 500,
    CD: 400,
    C: 100,
    XC: 90,
    L: 50,
    XL: 40,
    X: 10,
    IX: 9,
    V: 5,
    IV: 4,
    I: 1
  }

  let answer = "";
  let numTemp = num;
  let decimal = 0;
  let remainder = 0;

  if (num == 0) answer = 0;
  if (num > 0) {
    let romanArr = Object.entries(romanNumerals);
    for (let [key, value] of romanArr) {
      if (numTemp / value >= 1) {
        decimal = Math.floor(numTemp / value);
        remainder = numTemp % value;
        answer += key.repeat(decimal);
        numTemp = remainder;
      }
    }
  }
  return answer;
}

console.log(convertToRoman(2014));
console.log(convertToRoman(3999));

Upvotes: 1

Related Questions