Thomas Bengtsson
Thomas Bengtsson

Reputation: 399

Call a function from an if-statement inside a function

I have a function with an if-statement that in turn should call an outside function whether or not something is true. The result I get is 'undefined'. Could you please point me in the right direction?

Function 1:

function printRange(rangeStart, rangeStop) {
    let summa = [];

    for (i = rangeStart; i <= rangeStop; i++) {
        summa.push(i);
    }
    let result2 = summa.join();
    return result2;
}

Function 2:

function printRangeReversed(rangeStart, rangeStop) {
    let summa = [];

    for (i = rangeStart; i >= rangeStop; i--) {
        summa.push(i);
    }
    let result3 = summa.join();
    return result3;
}

Function 3:

function printAnyRange(rangeStart, rangeStop) {

    if (rangeStart < rangeStop) {
        printRange(rangeStart, rangeStop);
    } else {
        printRangeReversed(rangeStart, rangeStop);
    }
    return;
}

Calling the function: printAnyRange(21, 45);

As I said it all looks logical to me but I guess it isn't since I get the 'undefined'.

Expected result should be: "21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45"

Regards.

Upvotes: 1

Views: 2209

Answers (3)

Pranay Tripathi
Pranay Tripathi

Reputation: 1842

The value that is getting returned from function 1 and function 2 is not being using or stored by function 3. Try following code:

function printAnyRange(rangeStart, rangeStop) {

    if (rangeStart < rangeStop) {
        return printRange(rangeStart, rangeStop);
    } else {
        return printRangeReversed(rangeStart, rangeStop);
    }
}
console.log(printAnyRange(10, 15));

this should fix the issue.

Upvotes: 2

Jack Bashford
Jack Bashford

Reputation: 44125

You need to do something with the returned values, like log them:

function printAnyRange(rangeStart, rangeStop) {

    if (rangeStart < rangeStop) {
        console.log(printRange(rangeStart, rangeStop));
    } else {
        console.log(printRangeReversed(rangeStart, rangeStop));
    }
    return;
}

Or return them from the main function:

function printAnyRange(rangeStart, rangeStop) {

    if (rangeStart < rangeStop) {
        result = printRange(rangeStart, rangeStop);
    } else {
        result = printRangeReversed(rangeStart, rangeStop);
    }
    return result;
}

Upvotes: 1

Potato Salad
Potato Salad

Reputation: 4650

You're not returning anything. Capture the result of the functions and return that variable.

function printRange(rangeStart, rangeStop) {
    let summa = [];

    for (i = rangeStart; i <= rangeStop; i++) {
        summa.push(i);
    }
    let result2 = summa.join();
    return result2;
}

function printRangeReversed(rangeStart, rangeStop) {
    let summa = [];

    for (i = rangeStart; i >= rangeStop; i--) {
        summa.push(i);
    }
    let result3 = summa.join();
    return result3;
}

function printAnyRange(rangeStart, rangeStop) {
    let result = null;

    if (rangeStart < rangeStop) result = printRange(rangeStart, rangeStop);
    else result = printRangeReversed(rangeStart, rangeStop);
        
    return result;
}

console.log(printAnyRange(1,5));
console.log(printAnyRange(5,1));

Upvotes: 3

Related Questions