Не могу понять, почему я получаю сообщение об ошибке «Не могу прочитать свойство« 0 »из неопределенного» - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь выполнить задачу римскими цифрами из freeCodeCamp. Я понятия не имею, почему я получаю следующую ошибку:

if (numKey [i] [0] <= оставшееся) { Ошибка типа: невозможно прочитать свойство '0' из неопределенного` </p>

Вот мой код:

function convertToRoman(num) {
 const numKey = [[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'], [50,'L'], [40, 'XL'],  [10, 'X'], [9, 'IX'] [5, 'V'], [4, 'IV'] [1, 'I']];
 let remaining = num;
 let romanStr = '';
 while(remaining > 0) {
      for(let i = 0; i < numKey.length; i++) {
            if(numKey[i][0] <= remaining) {
                  let j = 0;
                  while(j < Math.floor(remaining/numKey[i][0])) {
                        romanStr += numKey[i][1]
                        remaining -= numKey[i][0] * Math.floor(remaining/numKey[i][0])
                        j++
                  }
            }
      }
      break;
 }
 return romanStr;
}

Понятия не имею, почему numKey[i][0] будет неопределенным. Насколько я знаю, он никогда не выходит за пределы диапазона, и когда я делаю console.log(numKey[i][0]) в строке выше, он всегда печатает правильное значение. Что-то мне не хватает?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Цикл правильныйУвидеть его неопределенный

const numKey = [[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'], [50,'L'], [40, 'XL'],  [10, 'X'], [9, 'IX'] [5, 'V'], [4, 'IV'] [1, 'I']];
console.log(numKey)

function convertToRoman(num) {
  const numKey = [
    [1000, 'M'],
    [900, 'CM'],
    [500, 'D'],
    [400, 'CD'],
    [100, 'C'],
    [90, 'XC'],
    [50, 'L'],
    [40, 'XL'],
    [10, 'X'],
    [9, 'IX'],[5, 'V'],
    [4, 'IV'],[1, 'I']
  ];
  let remaining = num;
  let romanStr = '';
  while (remaining > 0) {
    for (let i = 0; i < numKey.length; i++) {
      if (numKey[i][0] <= remaining) {
        let j = 0;
        while (j < Math.floor(remaining / numKey[i][0])) {
          romanStr += numKey[i][1]
          remaining -= numKey[i][0] * Math.floor(remaining / numKey[i][0])
          j++
        }
      }
    }
    break;
  }
  return romanStr;
}
console.log(convertToRoman(5))
0 голосов
/ 07 марта 2019

Я думаю, что у вас просто есть опечатка в вашем коде, массив numKey был просто неправильно отформатирован:

Попробуйте:

function convertToRoman(num) {
 const numKey = [[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'], [50,'L'], [40, 'XL'],  [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I']];

 let remaining = num;
 let romanStr = '';
 while(remaining > 0) {
      for(let i = 0; i < numKey.length; i++) {
            if(numKey[i][0] <= remaining) {
                  let j = 0;
                  while(j < Math.floor(remaining/numKey[i][0])) {
                        romanStr += numKey[i][1]
                        remaining -= numKey[i][0] * Math.floor(remaining/numKey[i][0])
                        j++
                  }
            }
      }
      break;
 }
 return romanStr;
}

console.log(convertToRoman(133));
console.log(convertToRoman(42));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...