Skip to content

Instantly share code, notes, and snippets.

@sandrooliveira
Last active July 20, 2017 14:32
Show Gist options
  • Save sandrooliveira/786bc0042daafb829bc6a13696965c60 to your computer and use it in GitHub Desktop.
Save sandrooliveira/786bc0042daafb829bc6a13696965c60 to your computer and use it in GitHub Desktop.
const produtos = [
{
id: 1,
preco: 10.0,
qtd: 2
},
{
id: 2,
preco: 10.0,
qtd: 2
},
{
id: 3,
preco: 10.0,
qtd: 2
},
{
id: 4,
preco: 10.0,
qtd: 0
}
]
console.log("2a ============================")
const checkQtd = value => value.qtd > 0
const prodComQtd = produtos.filter(checkQtd)
console.log(prodComQtd)
console.log("2b ============================")
const prodSubtotais = produtos.map((produto) =>{
produto.subTotal = produto.qtd*produto.preco
produto.id
return produto
});
console.log(prodSubtotais)
console.log("2c ============================")
const somaSubtotais = prodSubtotais.reduce((anterior,atual) => {
return anterior + atual.subTotal
},0)
console.log(somaSubtotais)
@sandrooliveira
Copy link
Author

sandrooliveira commented Jul 19, 2017

Fiquei com uma dúvida no exercício 2c.
De início eu tinha feito o seguinte (igual o Ex 1):
const somaSubtotais = prodSubtotais.reduce((anterior,atual) => anterior.subTotal+ atual.subTotal)
console.log(somaSubtotais)
Porém tive um not a number (NaN) de retorno, e o mais engraçado é que se eu deixar somente 2 elementos no array funciona.

Ai depois dar uma pesquisada cheguei na solução acima, mas não compreendi muito bem o seguinte:
Porque neste caso, eu faço a soma só com o subtotal do objeto atual?

@tuliofaria
Copy link

Fala @sandrooliveira! Seu problema seria por faltar o valor inicial? (aquele valor que vc passa depois da arrow function)

@sandrooliveira
Copy link
Author

Então a questão do 0 eu entendi que é o valor inicial. Só não entendi porque o código abaixo retornou um NaN com um array com mais de 2 elementos.
const somaSubtotais=prodSubtotais.reduce((anterior,atual) => anterior.subTotal+ atual.subTotal)
console.log(somaSubtotais)

@tuliofaria
Copy link

Fala Sandro, interessante isso.
Com 2 elementos ele faz a soma direta mesmo, e a partir de 2 ele começa a usar o valor inicial.
Se quiser descobrir um pouco mais sobre o comportamento, coloca um console.log(anterior, atual) antes de retornar a soma entre ele. Você verá que com 2 elementos ele tem apenas uma saída na tela :)
E pq saí NaN se não mudar o código? Ele tenta somar um undefined com um inteiro, e o resultado não é um número...
Para testar, tenta: console.log(undefined + 1) ;)

@sandrooliveira
Copy link
Author

Ah sim, agora ficou claro! Valeu!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment