Home > Back-end >  How to add to a global variable with a functions return value (JavaScript)
How to add to a global variable with a functions return value (JavaScript)

Time:11-11

I have a callback function which takes two parameter and a global variable that I would like to add to with the value returned from this function. However the variable remains the same. Please help!

let sum = 0;
const myArr = [{name: 'dj', value: '2'}, {name: 'kd', value: '3'}];

function addObjValue(arr, total) {
    arr.forEach(element => {
        const val = element.value;
        total  = checkObjValue(val);
        console.log(total);
    })
}

function checkObjValue(x) {
    switch(x) {
        case '2':
            return 1;
            break;
        case '3':
            return 5;
            break;
    }
}

addObjValue(myArr, sum); // sum remains 0

CodePudding user response:

You can make a local variable and save totals there, then just return total value

function addObjValue(arr) {
    let total = 0
    arr.forEach(element => {
        const val = element.value;
        total  = checkObjValue(val);
        console.log(total);
    })
    return total
}

And after that make your sum equal to returned value

sum = addObjValue(myArr);

Update One more thing. To get sum from an array you can use reduce method

arr.reduce((totalSum, currenElement) => {
    return totalSum   currenElement.value
}, 0 /*first value of totalSum (by default equal to the first element of the array)*/)

CodePudding user response:

Issue:

  • total is scoped under addObjValue so it doesn't add to final sum
  • break inside switch-case is unreachable as it comes after return 1;

You can make below 2 changes to make it work.

let sum = 0;
const myArr = [{name: 'dj', value: '2'}, {name: 'kd', value: '3'}];

function addObjValue(arr, total) {
    arr.forEach(element => {
        const val = element.value;
        total  = checkObjValue(val);
    })
    return total; // change 1: returning total
}

function checkObjValue(x) {
    switch(x) {
        case '2':
            return 1;
        case '3':
            return 5;
    }
}

sum = addObjValue(myArr, sum); // change 2: assigned return value back to sum
  • Related