Переноc программы из выводящейся в консоль в функцию

Проблема следующая: написал программу которая переводит число в слова(input = 55; output = fifty five). Если выводить результат в консоль, то все отлично работает, но задача должна быть решена в такой функции(как на LeetCode или CodeWars). Функция нужна для прохождения тестов написанных на mocha:

module.exports = function toReadable (num) {

}

Вот само работающее решение, которое выводит результат в консоль:

let num = 45; // Это число меняется на любое в диапазоне 1-1000
let arr = Array.from(num.toString());
let len = arr.length;
let num0 = Number(arr[0]);
let num1 = Number(arr[1]);
let num2 = Number(arr[2]);

if (len === 1) {
    console.log(units(num0));
}
else if (len === 2) {
    if (num > 19) {
        console.log(dozens(num0), units(num1));
    }
    else {
        console.log(especial(num));
    }
}
else if (len === 3){
    let str = num1.toString() + num2.toString();
    let separated_num = Number(str);

    if (separated_num > 19) {
        console.log(units(num0),'hundred', dozens(num1), units(num2));
    }
    else if (separated_num >= 10){
        console.log(units(num0), 'hundred', especial(separated_num));
    }
    else {
        console.log(units(num0), 'hundred', units(num2));
    }
}

function units(num0) {
    let res_units = '';
    switch(num0) {
        case 1:  res_units += 'one'; break;
        case 2:  res_units += 'two'; break;
        case 3:  res_units += 'three'; break;
        case 4:  res_units += 'four'; break;
        case 5:  res_units += 'five'; break;
        case 6:  res_units += 'six'; break;
        case 7:  res_units += 'seven'; break;
        case 8:  res_units += 'eight'; break;
        case 9:  res_units += 'nine'; break;
    }
    return res_units;
}
function dozens(num0) {
    let res_dozens = '';
    switch(num0) {
        case 2:  res_dozens += 'twenty'; break;
        case 3:  res_dozens += 'thirty'; break;
        case 4:  res_dozens += 'fourty'; break;
        case 5:  res_dozens += 'fifty'; break;
        case 6:  res_dozens += 'sixty'; break;
        case 7:  res_dozens += 'seventy'; break;
        case 8:  res_dozens += 'eighty'; break;
        case 9:  res_dozens += 'ninety'; break;
    }
    return res_dozens;
}
function especial(num) {
    let res_especial = '';
    switch(num) {
        case 10:  res_especial += 'ten'; break;
        case 11:  res_especial += 'eleven'; break;
        case 12:  res_especial += 'twelve'; break;
        case 13:  res_especial += 'thirteen'; break;
        case 14:  res_especial += 'fourteen'; break;
        case 15:  res_especial += 'fifteen'; break;
        case 16:  res_especial += 'sixteen'; break;
        case 17:  res_especial += 'seventeen'; break;
        case 18:  res_especial += 'eightteen'; break;
        case 19:  res_especial += 'nineteen'; break;
    }
    return res_especial;
}

Как сделать так чтобы функция toReadable возвращала результат, а не просто вывод в консоль? Все попытки сделать были бесполезными и результат возврата был undefined. Пытался сделать добавив дополнительные функции:

module.exports = function toReadable (num) {
    let arr = Array.from(num.toString());
    let len = arr.length;
    let num0 = Number(arr[0]);
    let num1 = Number(arr[1]);
    let num2 = Number(arr[2]);
    
    if (len === 1) {
        units(num0);
    }
    else if (len === 2) {
        if (num > 19) {
            res2();
        }
        else {
            especial(num);
        }
    }
    else if (len === 3){
        let str = num1.toString() + num2.toString();
        let separated_num = Number(str);
    
        if (separated_num > 19) {
            res3();
        }
        else if (separated_num >= 10){
            res4();
        }
        else {
            res5();
        }
    }
    
    function units(num0) {
        let res_units = '';
        switch(num0) {
            case 1:  res_units += 'one'; break;
            case 2:  res_units += 'two'; break;
            case 3:  res_units += 'three'; break;
            case 4:  res_units += 'four'; break;
            case 5:  res_units += 'five'; break;
            case 6:  res_units += 'six'; break;
            case 7:  res_units += 'seven'; break;
            case 8:  res_units += 'eight'; break;
            case 9:  res_units += 'nine'; break;
        }
        return res_units;
    }
    function dozens(num0) {
        let res_dozens = '';
        switch(num0) {
            case 2:  res_dozens += 'twenty'; break;
            case 3:  res_dozens += 'thirty'; break;
            case 4:  res_dozens += 'fourty'; break;
            case 5:  res_dozens += 'fifty'; break;
            case 6:  res_dozens += 'sixty'; break;
            case 7:  res_dozens += 'seventy'; break;
            case 8:  res_dozens += 'eighty'; break;
            case 9:  res_dozens += 'ninety'; break;
        }
        return res_dozens;
    }
    function especial(num) {
        let res_especial = '';
        switch(num) {
            case 10:  res_especial += 'ten'; break;
            case 11:  res_especial += 'eleven'; break;
            case 12:  res_especial += 'twelve'; break;
            case 13:  res_especial += 'thirteen'; break;
            case 14:  res_especial += 'fourteen'; break;
            case 15:  res_especial += 'fifteen'; break;
            case 16:  res_especial += 'sixteen'; break;
            case 17:  res_especial += 'seventeen'; break;
            case 18:  res_especial += 'eightteen'; break;
            case 19:  res_especial += 'nineteen'; break;
        }
        return res_especial;
    }
    function res2(){
        return (dozens(num0), units(num1));
    }
    function res3(){
        return (units(num0),'hundred', dozens(num1), units(num2));
    }
    function res4(){
        return (units(num0), 'hundred', especial(separated_num));
    }
    function res5(){
        return (units(num0), 'hundred', units(num2))
    }
}


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

Автор решения: Anton Tretiak

Выполнил путём создания переменных

module.exports = function toReadable (num) {
    if (num == 0) {
        return 'zero';
    }
    else {
        return mainFunc(num);
    }

}
function mainFunc(num){
    let arr = Array.from(num.toString());
    let len = arr.length;
    let num0 = Number(arr[0]);
    let num1 = Number(arr[1]);
    let num2 = Number(arr[2]);
    
    if (len === 1) {
        return units(num0);
    }
    else if (len === 2) {
        if (num > 19) {
            let res = '';
            res += dozens(num0);
            if (num1 != 0) {
                res += ' ';
            }
            res += units(num1);
            return res;
        }
        else {
            return especial(num);
        }
    }
    else if (len === 3){
        let str = num1.toString() + num2.toString();
        let separated_num = Number(str);
    
        if (separated_num > 19) {
            let res = '';
            res += units(num0);
            res += ' hundred ';
            res += dozens(num1);
            if (num2 != 0) {
                res += ' ';
                res += units(num2);
            }
            return res;
        }
        else if (separated_num >= 10){
            let res = '';
            res += units(num0);
            res += ' hundred ';
            res += especial(separated_num);
            return res;
        }
        else {
            let res = '';
            res += units(num0);
            if ((num1 == 0) && (num2 == 0)) {
                res += ' hundred';
            }
            else {
                res += ' hundred ';
                res += units(num2);
            }
            return res;
        }
    }
    
    function units(num0) {
        let res_units = '';
        switch(num0) {
            case 1:  res_units += 'one'; break;
            case 2:  res_units += 'two'; break;
            case 3:  res_units += 'three'; break;
            case 4:  res_units += 'four'; break;
            case 5:  res_units += 'five'; break;
            case 6:  res_units += 'six'; break;
            case 7:  res_units += 'seven'; break;
            case 8:  res_units += 'eight'; break;
            case 9:  res_units += 'nine'; break;
        }
        return res_units;
    }
    function dozens(num0) {
        let res_dozens = '';
        switch(num0) {
            case 2:  res_dozens += 'twenty'; break;
            case 3:  res_dozens += 'thirty'; break;
            case 4:  res_dozens += 'forty'; break;
            case 5:  res_dozens += 'fifty'; break;
            case 6:  res_dozens += 'sixty'; break;
            case 7:  res_dozens += 'seventy'; break;
            case 8:  res_dozens += 'eighty'; break;
            case 9:  res_dozens += 'ninety'; break;
        }
        return res_dozens;
    }
    function especial(num) {
        let res_especial = '';
        switch(num) {
            case 10:  res_especial += 'ten'; break;
            case 11:  res_especial += 'eleven'; break;
            case 12:  res_especial += 'twelve'; break;
            case 13:  res_especial += 'thirteen'; break;
            case 14:  res_especial += 'fourteen'; break;
            case 15:  res_especial += 'fifteen'; break;
            case 16:  res_especial += 'sixteen'; break;
            case 17:  res_especial += 'seventeen'; break;
            case 18:  res_especial += 'eighteen'; break;
            case 19:  res_especial += 'nineteen'; break;
        }
        return res_especial;
    }
}

→ Ссылка