{"componentChunkName":"component---src-templates-blog-post-js","path":"/map-filter-e-reduce/","result":{"data":{"markdownRemark":{"id":"d6055a7f-90bc-54f7-a9de-83d3a5f6efdf","fields":{"slug":"/map-filter-e-reduce/"},"frontmatter":{"title":"Map, Filter e Reduce","description":"Vamos ver um pouco sobre Array Functions?!","date":"03 de Jul de 2020","thumbnail":"/assets/img/javascript.png"},"html":"<p>Map, filter e reduce são métodos do JavaScript para manipular arrays. Esses três métodos são os mais importantes para se manipular valores do seu array. </p>\n<p>Sem muitas delongas vamos ver como usar esses métodos e entender como eles funcionam !!!</p>\n<h1>.map()</h1>\n<p>A função map serve para \"varrer\" o nosso array modificar alguns valores e devolver um novo array de elementos. A função que manipula esses valores é uma callback, que nós mesmos criamos. Essa função callback precisa modificar e retornar esse valor modificado. </p>\n<p><code class=\"language-text\">array.map(function(elemento, indice, array){})</code></p>\n<p>Nossa função callback recebe três parâmetros:</p>\n<ol>\n<li>Elemento - O Elemento atual do array</li>\n<li>Indice - O indice do elemento atual</li>\n<li>Array - O Array que chamou a função map</li>\n</ol>\n<p>É interessante lembrar que o map retorna um novo array, com a mesma quantidade de elementos que o array original. <br>\nQuando usamos o map ?! Um exemplo simples é quando precisamos multiplicar o valor dos elementos do nosso array por 2, por exemplo. </p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> numeros <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">7</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">//Vamos multiplicar todos nossos números por 2</span>\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">multiplicar</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">numero</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> numero <span class=\"token operator\">*</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> novosNumeros <span class=\"token operator\">=</span> numeros<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span>multiplicar<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>novosNumeros<span class=\"token punctuation\">)</span>\n<span class=\"token comment\">// [2, 8, 10, 14, 6]</span></code></pre></div>\n<p>Simples né ?!</p>\n<p>Agora vamos usar o map em um caso um pouco mais complexo, vamos pegar nosso array de produtos e somar o valor de cada item ...</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> produtos <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"caneta\"</span><span class=\"token punctuation\">,</span> qtd<span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> preco<span class=\"token operator\">:</span> <span class=\"token number\">1.50</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"caderno\"</span><span class=\"token punctuation\">,</span> qtd<span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> preco<span class=\"token operator\">:</span> <span class=\"token number\">10.00</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"borracha\"</span><span class=\"token punctuation\">,</span> qtd<span class=\"token operator\">:</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> preco<span class=\"token operator\">:</span> <span class=\"token number\">0.50</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">soma</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">produto</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> total <span class=\"token operator\">=</span> produto<span class=\"token punctuation\">.</span>qtd <span class=\"token operator\">*</span> produto<span class=\"token punctuation\">.</span>preco<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token operator\">...</span>produto<span class=\"token punctuation\">,</span> total <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> totais <span class=\"token operator\">=</span> produtos<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span>soma<span class=\"token punctuation\">)</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>totais<span class=\"token punctuation\">)</span>\n<span class=\"token comment\">/* \n [\n  { nome: \"caneta\", qtd: 2, preco: 1.50, total: 3 },\n  { nome: \"caderno\", qtd: 0, preco: 10.00, total: 0 },\n  { nome: \"borracha\", qtd: 5, preco: 0.50, total: 2.5 },\n]\n*/</span></code></pre></div>\n<h1>.filter()</h1>\n<p>A função filter, como o próprio nome já diz, serve para filtrar nosso array. Ele retorna um novo array a partir de uma função callback que fará um teste em cada um dos elementos do array, para saber se o elemento fará ou não parte do novo array.  </p>\n<p>Essa função callback deve retornar um booleano.  Caso retorne <strong>true</strong>, o elemento fará parte do nosso array, caso retorne <strong>false</strong>, ele não entrará em nosso novo array.</p>\n<p><code class=\"language-text\">array.filter(function(elemento, indice, array){})</code></p>\n<p>Nossa função callback recebe três parâmetros:</p>\n<ol>\n<li>Elemento - O Elemento atual do array</li>\n<li>Indice - O indice do elemento atual\\</li>\n<li>Array - O Array que chamou a função map</li>\n</ol>\n<p>Vamos filtrar nossa lista de alunos, e pegar apenas quem tirou nota maior ou igual a 6.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> alunos <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"Raul\"</span><span class=\"token punctuation\">,</span> nota<span class=\"token operator\">:</span> <span class=\"token number\">5.99</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"Ana\"</span><span class=\"token punctuation\">,</span> nota<span class=\"token operator\">:</span> <span class=\"token number\">7.5</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"Cleber\"</span><span class=\"token punctuation\">,</span> nota<span class=\"token operator\">:</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"Joana\"</span><span class=\"token punctuation\">,</span> nota<span class=\"token operator\">:</span> <span class=\"token number\">10</span> <span class=\"token punctuation\">}</span> \n<span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">maiorIgualA6</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">aluno</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> aluno<span class=\"token punctuation\">.</span>nota <span class=\"token operator\">>=</span> <span class=\"token number\">6</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> passaram <span class=\"token operator\">=</span> alunos<span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>maiorIgualA6<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>pegaAlunos<span class=\"token punctuation\">)</span>\n<span class=\"token comment\">/*\n  [\n    { nome: \"Ana\", nota: 7.5 },\n    { nome: \"Joana\", nota: 10 }\n  ]\n*/</span></code></pre></div>\n<h1>.reduce()</h1>\n<p>A função reduce funciona de forma diferente você pode modificar os valores do seu array ou agrega-los (somar, dividir etc...).</p>\n<p>O grande diferencial é que o reduce pode retornar qualquer coisa(numero, string, array etc...).</p>\n<iframe src=\"https://giphy.com/embed/cAEm5rSuuBEGY\" width=\"480\" height=\"480\" frameBorder=\"0\" class=\"giphy-embed\" style=\"pointer-events: none;\"></iframe>\n<p>Vamos entender melhor como esse cara funciona. </p>\n<p>Assim como o map e filter, o reduce consegue manipular o valor de cada elemento do array. Mas o diferencial dele é que ele conta com um acumulador (o valor de todas as iterações até o momento). </p>\n<p>Vamos ver melhor como é montado o reduce:</p>\n<h4><code class=\"language-text\">array.reduce(callback, valorInicial);</code></h4>\n<p><strong>Calback -</strong> Função que será executada em cada elemento do array, ela recebe quatro parâmetros:</p>\n<ol>\n<li>acumulador - É o valor acumulado de cada iteração. </li>\n<li>valorAtual - O elemento atual do array</li>\n<li>indice - O indice do elemento atual do array</li>\n<li>array - Array do qual a função reduce foi chamada</li>\n</ol>\n<p><strong>ValorInicial -</strong> Um valor a ser usado como o primeiro argumento para a primeira chamada do <code class=\"language-text\">callback.</code> É opcional definir um valor inicial ou não! Caso você não passe nada, o valor inicial do seu acumulador é o primeiro elemento do array.</p>\n<p>Você pode encontrar mais detalhes seguindo a <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce\">documentação</a> oficial. </p>\n<p>Vamos tentar entender isso tudo na prática !</p>\n<p>Como primeiro exemplo vamos multiplicar os valores de nosso array.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> numeros <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">6</span><span class=\"token punctuation\">,</span> <span class=\"token number\">8</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">multiplicador</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">acumulador<span class=\"token punctuation\">,</span> elementoAtual</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> acumulador <span class=\"token operator\">*</span> elementoAtual<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> resultado <span class=\"token operator\">=</span> numeros<span class=\"token punctuation\">.</span><span class=\"token function\">reduce</span><span class=\"token punctuation\">(</span>multiplicador<span class=\"token punctuation\">)</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>resultado<span class=\"token punctuation\">)</span>\n<span class=\"token comment\">// 960</span></code></pre></div>\n<p>Como vimos acima, nesse exemplo nossa função retornou um número. </p>\n<p>Vamos ver como foram cada uma das execuções:</p>\n<ul>\n<li>Execução 1 – <code class=\"language-text\">acumulador=1</code>;<code class=\"language-text\">elementoAtual=4</code></li>\n<li>Execução 2 – <code class=\"language-text\">acumulador=4</code>;<code class=\"language-text\">elementoAtual=5</code></li>\n<li>Execução 3 – <code class=\"language-text\">acumulador=20</code>;<code class=\"language-text\">elementoAtual=6</code></li>\n<li>Execução 4 – <code class=\"language-text\">acumulador=120</code>;<code class=\"language-text\">elementoAtual=8</code></li>\n</ul>\n<p>O resultado final é de 960 !</p>\n<p>Vamos a um exemplo usando objetos, o objetivo vai ser calcular a média do valor total de todos os itens</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> itens <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"camisa\"</span><span class=\"token punctuation\">,</span> valor<span class=\"token operator\">:</span> <span class=\"token number\">32</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"calça\"</span><span class=\"token punctuation\">,</span> valor<span class=\"token operator\">:</span> <span class=\"token number\">23</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"chinelo\"</span><span class=\"token punctuation\">,</span> valor<span class=\"token operator\">:</span> <span class=\"token number\">16</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"tenis\"</span><span class=\"token punctuation\">,</span> valor<span class=\"token operator\">:</span> <span class=\"token number\">7</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"bone\"</span><span class=\"token punctuation\">,</span> valor<span class=\"token operator\">:</span> <span class=\"token number\">4</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">\"bala\"</span><span class=\"token punctuation\">,</span> valor<span class=\"token operator\">:</span> <span class=\"token number\">3</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">calculatMediaTotal</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">acumulador<span class=\"token punctuation\">,</span> elementoAtual<span class=\"token punctuation\">,</span> indice<span class=\"token punctuation\">,</span> array</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>indice  <span class=\"token operator\">===</span> array<span class=\"token punctuation\">.</span>length <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> acumulador <span class=\"token operator\">/</span> array<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> acumulador <span class=\"token operator\">+</span> elementoAtual<span class=\"token punctuation\">.</span>valor<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> mediaTotal <span class=\"token operator\">=</span> itens<span class=\"token punctuation\">.</span><span class=\"token function\">reduce</span><span class=\"token punctuation\">(</span>calculatMediaTotal<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>mediaTotal<span class=\"token punctuation\">)</span>\n<span class=\"token comment\">//13.666666666666666</span></code></pre></div>\n<p>Vamos entender o que está acontecendo ...</p>\n<p>Eu passei um inicializador com o valor <strong>0</strong>, pois como estamos lidando com um objeto, e no return da função estamos retornando apenas um valor numérico não conseguimos acessar <code class=\"language-text\">acumulador.valor</code> da segunda execução pra frente, o que causaria um erro em nossa aplicação.</p>\n<p>A propriedade array é o array que chamou a função reduce. O indice é o indice do elemento do nosso array.</p>\n<ul>\n<li>Execução 1 – <code class=\"language-text\">acumulador=0</code>;  <code class=\"language-text\">elementoAtual= { nome: &#39;camisa&#39;, valor: 32 }</code>;  <code class=\"language-text\">indice=0</code></li>\n<li>Execução 2 – <code class=\"language-text\">acumulador=32</code>;  <code class=\"language-text\">elementoAtual=  { nome: &#39;calça&#39;, valor: 23 }</code>;  <code class=\"language-text\">indice=1</code> </li>\n<li>Execução 3 –   <code class=\"language-text\">acumulador=55</code>;  <code class=\"language-text\">elementoAtual= { nome: &#39;chinelo&#39;, valor: 16 }</code>;  <code class=\"language-text\">indice=2</code></li>\n<li>Execução 4 – <code class=\"language-text\">acumulador=71</code>;  <code class=\"language-text\">elementoAtual=  { nome: &#39;tenis&#39;, valor: 7 }</code>;  <code class=\"language-text\">indice=3</code></li>\n<li>Execução 5 – <code class=\"language-text\">acumulador=78</code>;  <code class=\"language-text\">elementoAtual= { nome: &#39;bone&#39;, valor: 4 }</code>;   <code class=\"language-text\">indice=4</code></li>\n<li>Execução 6 – <code class=\"language-text\">acumulador=82</code>;  <code class=\"language-text\">elementoAtual= { nome: &#39;bala&#39;, valor: 3 }</code>;  <code class=\"language-text\">indice=5</code></li>\n</ul>\n<p>Após isso dividimos o valor do nosso acumulador pela quantidade de elementos em nosso array(<code class=\"language-text\">array.length</code>). </p>\n<p>Quanto masi praticar o uso do reduce, mais conseguimos entender melhor o funcionamento e quando utilizar o mesmo. Ele, dentre os outros é o mais complicadinho de se usar !!!!</p>\n<h1>Vamos combinar os tres juntos ?!</h1>\n<p>Podemos usar os três métodos em conjunto, para ter alguns resultados legais.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> carrinho <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">'caneta'</span><span class=\"token punctuation\">,</span> qtde<span class=\"token operator\">:</span> <span class=\"token number\">10</span><span class=\"token punctuation\">,</span> preco<span class=\"token operator\">:</span> <span class=\"token number\">7.99</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">'impressora'</span><span class=\"token punctuation\">,</span> qtde<span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> preco<span class=\"token operator\">:</span> <span class=\"token number\">649.50</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">'caderno'</span><span class=\"token punctuation\">,</span> qtde<span class=\"token operator\">:</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> preco<span class=\"token operator\">:</span> <span class=\"token number\">27.10</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">'lapis'</span><span class=\"token punctuation\">,</span> qtde<span class=\"token operator\">:</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> preco<span class=\"token operator\">:</span> <span class=\"token number\">5.82</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span> nome<span class=\"token operator\">:</span> <span class=\"token string\">'tesoura'</span><span class=\"token punctuation\">,</span> qtde<span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> preco<span class=\"token operator\">:</span> <span class=\"token number\">19.20</span> <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">qtdMaiorQueZero</span> <span class=\"token operator\">=</span> <span class=\"token parameter\">elemento</span> <span class=\"token operator\">=></span> elemento<span class=\"token punctuation\">.</span>qtde <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">somaTotalCadaItem</span> <span class=\"token operator\">=</span> <span class=\"token parameter\">elemento</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> <span class=\"token operator\">...</span>elemento<span class=\"token punctuation\">,</span> total<span class=\"token operator\">:</span> elemento<span class=\"token punctuation\">.</span>qtde <span class=\"token operator\">*</span> elemento<span class=\"token punctuation\">.</span>preco<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">precoTotal</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">acumulador<span class=\"token punctuation\">,</span> elementoAtual</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> acumulador <span class=\"token operator\">+</span> elementoAtual<span class=\"token punctuation\">.</span>total<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> total <span class=\"token operator\">=</span> carrinho\n    <span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>qtdMaiorQueZero<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span>somaTotalCadaItem<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">reduce</span><span class=\"token punctuation\">(</span>precoTotal<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n\n\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>total<span class=\"token punctuation\">)</span>\n<span class=\"token comment\">//224.96</span></code></pre></div>\n<p>Aqui eu usei as arrow functions, para conseguir deixar o código mais enxuto. </p>\n<p>Vamos entender o que está acontecendo :</p>\n<ol>\n<li>Filtramos nosso carrinho, pegando apenas os itens com quantidade maior que 0.</li>\n<li>Andamos por cada item do nosso array, retornamos o item com uma propriedade total, que contem o valor total desse item (quantidade * preço)</li>\n<li>Somamos o valor total de todos os itens e temos como resultado, o valor do nosso carrinho de <strong>224.96</strong></li>\n</ol>\n<p>Bom é isso galera, espero que o post de hoje consiga ajudar a entender melhor essas três funções importantes do JS. Deixe seu feedback construtivo 🤘🏽🤘🏽🤘🏽</p>\n<p>Nos vemos na próxima !!!</p>\n<iframe src=\"https://giphy.com/embed/wuQTltXjfo7o4\" width=\"480\" width=\"480\" height=\"480\" frameBorder=\"0\" class=\"giphy-embed\" style=\"pointer-events: none;\"></iframe>","timeToRead":6}},"pageContext":{"slug":"/map-filter-e-reduce/","previousPage":{"frontmatter":{"title":"O ciclo de vida dos componentes do React com os Hooks"},"fields":{"slug":"/o-ciclo-de-vida-dos-componentes-do-react-com-os-hooks/"}},"nextPage":null}}}