перевод арабских в римские

прошу вас объяснить мне одну вещь, я читал про многомерные массивы, но никак не могу додуматься, дана функция по переводу, она рабочая, я проверял:

function romanNumerals(number) {
    var numberArray = number.toString().split("").reverse();
    var result = "";
     var numerals = [
        ["","I","II","III","IV","V","VI","VII","VIII","IX"],
        ["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"],
        ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"],
        ["","M","MM","MMM"]];    
    
    for (var i in numberArray){       
        result = numerals[i][parseInt(numberArray[i])] + result;
    }            
    return result;
}

объясните пожалуйста, как цикл находит нужное число, и переводит его из римского в обычное, желательно, подробнее, заранее, благодарен!


Ответы (1 шт):

Автор решения: EzioMercer

Чтобы разобраться в том как работает функция нужно взять лиcток бумаги и начинать пошагово самому проходить по всему алгоритму. Разберём как работает эта функция на примере 1067:

  1. Первая строка, т.е. что хранится в numberArray
    1. Переводим число в строку: "1067"
    2. Создаём массив из цифр данного числа: ['1', '0', '6', '7']
    3. Переворачиваем массив: ['7', '6', '0', '1']
  2. Объявляем начальное значение для хранилища ответа: result = ""
  3. Объявляем набор римских знаков: numerals = [[...], [...], ...]
  4. Начинаем перебирать индексы в массиве numberArray. Т.к. в данном случаем у нас массив имеет длину 4, а нумеруются элементы с 0, то i будет пробегать значения от 0 до 3 включительно
  5. Начинаем поиск и добавляем предыдущий ответ:
    1. Вычисляем numerals[0] = ["","I","II","III","IV","V","VI","VII","VIII","IX"]
    2. Вычисляем numberArray[0] = '7'
    3. Выделяем из строки целое число: parseInt('7') = 7
    4. Из массива numerals[0] находим 7-ой элемент: numerals[0][7] = "VII"
    5. Прибавляем к найденному элементу результат: "VII" + "" = "VII"
    6. Повторяем родительский пункт для i = 1

  1. Начинаем поиск и добавляем предыдущий ответ:
    1. Вычисляем numerals[1] = ["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"]
    2. Вычисляем numberArray[1] = '6'
    3. Выделяем из строки целое число: parseInt('6') = 6
    4. Из массива numerals[1] находим 6-ой элемент: numerals[1][6] = "LX"
    5. Прибавляем к найденному элементу результат: "LX" + "VII" = "LXVII"
    6. Повторяем родительский пункт для i = 2

  1. Начинаем поиск и добавляем предыдущий ответ:
    1. Вычисляем numerals[2] = ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"]
    2. Вычисляем numberArray[2] = '0'
    3. Выделяем из строки целое число: parseInt('0') = 0
    4. Из массива numerals[2] находим 0-ой элемент: numerals[2][0] = ""
    5. Прибавляем к найденному элементу результат: "" + "LXVII" = "LXVII"
    6. Повторяем родительский пункт для i = 3

  1. Начинаем поиск и добавляем предыдущий ответ:
    1. Вычисляем numerals[3] = ["","M","MM","MMM"]
    2. Вычисляем numberArray[3] = '1'
    3. Выделяем из строки целое число: parseInt('1') = 1
    4. Из массива numerals[3] находим 1-ый элемент: numerals[3][1] = "M"
    5. Прибавляем к найденному элементу результат: "M" + "LXVII" = "MLXVII"
    6. Закончили цикл
  2. Вернули результат: return "MLXVII"
→ Ссылка