sourlemonaid - 23 days ago 4x
Javascript Question

performing math on an array of strings(with numbers inside) with a loop of math operators

I have an array of strings and the strings hold numbers inside of them. I also have a set of operations i need to perform on those numbers. They follow the order of +, -,*, /. if the amount of numbers is more than 4 then it goes back to the plus sign.

``````  function calculate(n, operator, b) {
switch (operator) {
case 1:
n += b;
return n;
case 2:
n -= b;
return n;
case 3:
n *= b;
return n;
case 4:
n /= b;
return n;
}
}
numberArray = ["23", "44", "99", "324", "19"]
let n=0;
let c = 1;
for (var i = 0; i < numberArray.length; i++) {

calculate(n, c, parseInt(numberArray[i]));
if ( c < 4) {
c++;
} else {
c=1;
}
}
console.log(n);``````

for some reason the switch statement doesn't run correctly. it doesn't perform the operations and return the
`n`
back so i can get the total from the calculations.

i thought the `n += b`; in the function would update the value of `n`.

It does, but that `n` isn't the `n` in your code calling `calculate`. It's the `n` that's an argument to `calculate`. When you do:

``````calculate(n, c, parseInt(numbersArray[i]));
``````

the value of `n` is passed into `calculate`, not something that refers to the variable itself. (This is called "passing by value." JavaScript always passes the value of a variable.) The argument is like a local variable; updating it has no effect outside the function.

Simply use the result:

``````n = calculate(n, c, parseInt(numbersArray[i]));
``````

Updated snippet:

``````function calculate(n, operator, b) {
switch (operator) {
case 1:
n += b;
return n;
case 2:
n -= b;
return n;
case 3:
n *= b;
return n;
case 4:
n /= b;
return n;
}
}
numberArray = ["23", "44", "99", "324", "19"]
let n=0;
let c = 1;
for (var i = 0; i < numberArray.length; i++) {

n = calculate(n, c, parseInt(numberArray[i]));
if ( c < 4) {
c++;
} else {
c=1;
}
}
console.log(n);``````

Of course, this means your `switch` can be simpler:

``````switch (operator) {
case 1:
return n + b;
case 2:
return n - b;
case 3:
return n *= b;
case 4:
return n / b;
}
``````

Just FWIW, there's a clever way to update `c` as well, to avoid the `if`:

``````c = (c % 4) + 1;
``````

That'll wrap around for you.