Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Somando valores de atributos de uma API Rest

Boa Noite Devs !

Galera, eu estou iniciando no mundo da programação e estudando Angular tambem. Tenho uma app que recebe informações de produtos, e tambem seu preço. O que preciso e pegar todos os valores que estão nesses itens, somar e exibir-la depois na view.

Para elucidar minha duvida, essa é minha API, gostaria de pegar o valor que esta em precoItem, jogar em uma variavel seu valor total, para exiibir na depois. Alguem pode me ajudar ?

{
  "cadastros": [
    {
      "nomeItem": "Saia",
      "descricaoItem": "Conta da Esposa",
      "precoItem": "100",
      "id": 1
    }
  ]
}
3 respostas

Olá, Vitor! Tudo certo?

Desculpa pela demora!

Deixa eu ver se entendi:

Você quer somar todos os precoItem da lista de cadastros, é isso?

Se for, pode usar o reduce:

const soma = cadastros.reduce((total, cadastro) => {
  return total + cadastro.precoItem;
}, 0);

Se você nunca trabalhou com o reduce ele pode ser um pouco confuso, então você pode dar uma olhada aqui para ver mais sobre no site da MDN.

Espero que ajude!

Bom dia Leonardo Fazia tempo que havia perguntado e tinha até desistido.

Então, eu tentei usar o reduce da forma que você me passou, porem esse precoItem vem de uma API rest que criei para armazenar aquelas infos.

Logo quando eu tento implementar, ele me retorna que a propriedade não existe no tipo Cadastro. Talvez, eu com meu pouco conhecimento, não soube implementar direito, mas se puder me ajudar.!

[](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

a forma que estou passando no service:

SomaValores(cadastro: Cadastro[]):void{ 
  let soma = cadastro.reduce((somatotal, cadastro) => {
    soma = somatotal + cadastro.precoItem;
    return soma; 
  }, 0);

No componente

 total(event):any{
   var realTotal = this.service.SomaValores(event);
    console.log(realTotal);
    return realTotal;
  }

Estou jogando como event, por causa do evento click, mas nao sei ao certo se esta correto.

Deste ja, muito obrigado pela ajuda !

solução!

Consegui fazer funcionar, alterando um pouco a estrutura da codigo deixando assim:

SomaValores(cadastro: Cadastro[]): number {
    console.log(cadastro);
    const aux = 0;
    const soma = cadastro.reduce(
        (somatotal, cadastro) => somatotal + cadastro.precoItem, aux
    );
    return aux;

Muito Obrigado !!