Calculation via Javascript

4

I'm having trouble performing a price calculation for multiple products on the Front End.

I have array of products and I need to add them through a function.

Example:

produto[0] = {produto:'Camisa',preco:'45,90'};
produto[0] = {produto:'Calça', preco:'100,99'};

function somarTudo(arrProdutos){
   var total = 0;
      for (i = 0; i < arrProdutos.length; i++) { 
          total += arrProdutos[i].preco;
      }
}

somarTudo(produto);

Only you're giving me a strange value as a return:

"45,90100,99"

What do I need to do?

    
asked by anonymous 07.11.2017 / 20:53

1 answer

5

These values are in String format and not Number . And since JavaScript uses + also to join / concatenate strings it ends up thinking that this is text.

To turn text from numbers into numbers that JavaScript can read you must use . to separate the decimal part and not have , . So you have to treat this text before using / converting it to a number.

You can do this:

var produto = [{
    produto: 'Camisa',
    preco: '45,90'
  },
  {
    produto: 'Calça',
    preco: '100,99'
  }
];


function somarTudo(arrProdutos) {
  var total = 0;
  for (i = 0; i < arrProdutos.length; i++) {
  var preco = arrProdutos[i].preco.replace(/\./g, '').replace(',', '.');
    total += Number(preco);
  }
  return total;
}

var total = somarTudo(produto);
console.log(total); // 146.89

Another suggestion might look like this:

var produto = [{
    produto: 'Camisa',
    preco: '45,90'
  },
  {
    produto: 'Calça',
    preco: '100,99'
  }
];


function somarTudo(arrProdutos) {
  return arrProdutos.reduce((soma, prod) => {
    var preco = prod.preco.replace(/\./g, '').replace(',', '.');
    return soma += Number(preco);
  }, 0);
}

var total = somarTudo(produto);
console.log(total); // 146.89
    
07.11.2017 / 20:58