Mohit Aggarwal
Mohit Aggarwal

Reputation: 133

addition of values in node.js

enter image description here

above is result of below snippet of code

 var total_points = 0
for(var i = 0; i < req.body.requisites.length; i++){

    total_points = total_points + req.body.requisites[i].points
    console.log(req.body.requisites[i].points ,  total_points)
}
console.log('total points :' + total_points)
req.body.points = total_points

I am not getting why one time it is concatenating the results (see the last values before 'total points') and next time it calculates correctly.

Appreciated if you can help.

Thanks in advance!

Upvotes: 1

Views: 1621

Answers (2)

jfriend00
jfriend00

Reputation: 707476

As per my earlier comment, it seems like some of your input must be a string instead of number and because of Javascript's coercion rules when adding a string and a number you are getting string concatenation instead of math addition.

You can force all the input to numbers so you always get addition like this:

var total_points = 0
for (var i = 0; i < req.body.requisites.length; i++) {
    total_points = total_points + (+req.body.requisites[i].points);
    console.log(req.body.requisites[i].points ,  total_points)
}
console.log('total points :' + total_points)
req.body.points = total_points

And, it might be easier to use .reduce():

req.body.points = req.body.requisites.reduce((total, val) => total + (+val)), 0);

The (+req.body.requisites[i].points) or (+val) converts it to a number if it was a numeric string.

Upvotes: 2

Harshal Yeole
Harshal Yeole

Reputation: 4993

You code seems to be okay.

This might be happening because you are sending the value for one of req.body.requisites[points] as string and that is why it gets concatenated instead on addition.

Check your input or update the question with the input you are passing ie, req.body

Hope this helps you know the reason behind the mess!

Upvotes: 0

Related Questions