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 underaddObjValue
so it doesn't add to finalsum
- 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