Reputation: 133
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
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
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