1

i'm stucked with a simple logic, i have an array as a result that contains positive and negative numbers.

what i need is to sum both negative and positive and print a result

const arr = ['-8', '-3', '1', '-4', '0']
// expected results = -14

what i've tried so far is to separate negative and positive with:

 const positive = scores.filter(posNumber => posNumber >= 0)
 const negative = scores.filter(negNumber => negNumber < 0)

but if i perform a reduce on positive i get "010" as a result....

5 Answers5

3

The problem here is that your array is actually an array of strings instead of numbers. So in reality, you need to convert the array to an array of numbers and then you can sum the values.

const arr = ['-8', '-3', '1', '-4', '0'];
const sum = arr.reduce((acc, value) => acc + Number(value), 0); // -14
Luís Mestre
  • 1,851
  • 1
  • 11
  • 29
2

Those are strings. You need to convert them to Numbers first:

const arr = ['-8', '-3', '1', '-4', '0'].map(Number);
const positive = arr.filter(posNumber => posNumber >= 0);
const negative = arr.filter(negNumber => negNumber < 0);
const positiveSum = positive.reduce((sumSoFar, current) => sumSoFar + current, 0);
const negativeSum = negative.reduce((sumSoFar, current) => sumSoFar + current, 0);

Or just

const arr = ['-8', '-3', '1', '-4', '0'].map(Number);
const sum = arr.reduce((sumSoFar, current) => sumSoFar + current, 0);

for the overall sum.

Cam
  • 14,930
  • 16
  • 77
  • 128
0
   let sum = 0
    arr.forEach(s => sum+= +s) 
     console.log(sum)

"+s" convert the value to an integer. You can use parseInt

labs
  • 790
  • 6
  • 8
0

To piggyback off of Luís, once the strings are converted to integers, there's no need to break out the positive from the negative if you're just looking for the overall sum.

Blackard
  • 85
  • 10
0

You can use parseInt to convert string to a number and then do the sum.

let sum = arr.reduce((accum,each)=>{ 
accum = accum + parseInt(each);
return accum;
},0);
santhini s
  • 41
  • 2