{"componentChunkName":"component---src-templates-blog-post-js","path":"/descubra-as-4-diferencas-entre-map-e-foreach/","result":{"data":{"markdownRemark":{"fields":{"slug":"/descubra-as-4-diferencas-entre-map-e-foreach/"},"frontmatter":{"titulo":"Descubra as 4 diferenças entre map e foreach","data":"30/01/2021","tag":"Javascript","image":{"childImageSharp":{"fluid":{"src":"/static/21a3d24ab7ce38466dc74d326ee91eec/46604/mapfor.png","base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABCklEQVQ4y61U22rCQBCdL1Ko4CUxBtFoGmKIJtZErUJrBcE3f0V86QeUPvQPA0d340ZT8QYTOGT2zOxhDrO7BOaPfn7/wAkqlgxwgoymA06QbtrgRE5Qa3Rxa33OXaulaxufRSaogmrdQkVvy3/N6MiCc07FFd06Io1VrRKVHQrSdkP0+jFee0N0nQBmy005P0LnsBaxNxjLvIDg3WNO1OYsVw+C4WiO1XqD+H0Bx3tD2/YxmS0RTxfZ5ul8iWjyiY+vteSD0UzmmpYnm8pZFhbKWitLCD61dbIs8qqurKX8/0HRo9O9N4yc5XtH5JbQxZTZb0rhpQ5O0Hb3DU4Q+3uYJAk4wd8ht+Aes8XJsuk6x0MAAAAASUVORK5CYII=","aspectRatio":1,"srcSet":"/static/21a3d24ab7ce38466dc74d326ee91eec/7e7e9/mapfor.png 225w,\n/static/21a3d24ab7ce38466dc74d326ee91eec/62b1f/mapfor.png 450w,\n/static/21a3d24ab7ce38466dc74d326ee91eec/46604/mapfor.png 500w","sizes":"(max-width: 500px) 100vw, 500px"}}}},"html":"<p>Você está prestes a descobrir as principais diferenças entre o <code class=\"language-text\">map()</code> e <code class=\"language-text\">foreach()</code> é como esses ensinamentos me fizeram <strong>desenvolver melhor</strong> em JavaScript.</p>\n<p>Como você sabe, o JavaScript tem alguns métodos que nos ajudam a trabalhar com os arrays. Os mais famosos são o <code class=\"language-text\">seuArray.map()</code> e <code class=\"language-text\">seuArray.forEach()</code>, mas esse mundo e maior do que pode ser imaginar, hoje existe mais de <strong>10 métodos</strong> que nos auxiliam para trabalhar com arrays em JS 😮 (em um próximo post falo sobre eles).</p>\n<p>Mas para quem está iniciando na programação, tem uma certa dificuldade para entender os conceitos e as diferenças entre os dois! <strong>E estou aqui para isso</strong>, para te ajudar a entender a diferença entre esses dois métodos 😃</p>\n<p>Métodos que vou abordar nesse post!</p>\n<ul>\n<li>Definição</li>\n<li>O retorno</li>\n<li>Desencadear outros métodos</li>\n<li>Mutabilidade</li>\n<li>Velocidade de desempenho</li>\n<li>Conclusão</li>\n</ul>\n<h3>🏳️ Definição</h3>\n<h4>forEach()</h4>\n<blockquote>\n<p>O método <code class=\"language-text\">forEach()</code> executa uma função fornecida uma vez para cada par de chave/valor no objeto Map, pela ordem de inserção. <a href=\"https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach\">ref</a>.</p>\n</blockquote>\n<p>Por padrão esse método percorre todos os itens de um array, como um <strong>loop normal</strong>.</p>\n<h4>map()</h4>\n<blockquote>\n<p>O método <code class=\"language-text\">map()</code> invoca a função callback passada por argumento para cada elemento do Array e devolve um novo Array como resultado. <a href=\"https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/map\">ref</a></p>\n</blockquote>\n<p>Na prática o método foreach e map parecem a mesma coisa, mas com a diferença do <strong>retorno</strong>. O foreach manipula os dados reais de um array e o map cria um novo array.</p>\n<h3>📍 O retorno</h3>\n<p>Como falado anteriormente na definição o método <code class=\"language-text\">forEach()</code> apenas percorre sobre o array, enquanto o <code class=\"language-text\">map()</code> retornar um novo valor.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> items <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\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">const</span> values <span class=\"token operator\">=</span> items<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">item</span> <span class=\"token operator\">=></span> item <span class=\"token operator\">*</span> item<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\">// return: undefined</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>values<span class=\"token punctuation\">)</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> items <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\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">const</span> values <span class=\"token operator\">=</span> items<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">item</span> <span class=\"token operator\">=></span> item <span class=\"token operator\">*</span> item<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\">// return: [1, 4, 9, 16]</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>values<span class=\"token punctuation\">)</span></code></pre></div>\n<h3>⏩ Desencadear outros métodos</h3>\n<p>Uma diferença importante entre esses dois métodos e a que no <code class=\"language-text\">map()</code> você consegue desencadear outros métodos, como por exemplo o <code class=\"language-text\">filter()</code>, <code class=\"language-text\">sort()</code>, <code class=\"language-text\">reduce()</code>. Já no <code class=\"language-text\">foreach()</code> você não tem acesso a esses métodos pois ele não retorna valor.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> items <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\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">]</span>\n\nitems<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">item</span> <span class=\"token operator\">=></span> item <span class=\"token operator\">*</span> item<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">reduce</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">total<span class=\"token punctuation\">,</span> value</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> total <span class=\"token operator\">+</span> value<span class=\"token punctuation\">)</span>\n<span class=\"token comment\">//return: Uncaught TypeError: Cannot read property 'reduce' of undefined</span>\n\nitems<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">item</span> <span class=\"token operator\">=></span> item <span class=\"token operator\">*</span> item<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">reduce</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">total<span class=\"token punctuation\">,</span> value</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> total <span class=\"token operator\">+</span> value<span class=\"token punctuation\">)</span>\n<span class=\"token comment\">//return: value: 30</span></code></pre></div>\n<h3>📌 Mutabilidade</h3>\n<blockquote>\n<p>forEach() não altera a matriz na qual é chamada. (No entanto, callback pode fazê-lo).</p>\n<p>map() não altera o array no qual é chamado (embora callback, se chamado, possa fazer isso). <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript\">ref</a></p>\n</blockquote>\n<p><img src=\"https://media.giphy.com/media/3o7527pa7qs9kCG78A/giphy.gif\"></p>\n<p>Na minha opinião essa definição não e totalmente clara, e um pouco confusa admito.</p>\n<p>Para saber o que não altera o array original, primeiro temos que verificar como esses dois métodos funcionam.</p>\n<p>O <code class=\"language-text\">map()</code> retorna um no array transformados com a mesma quantidade de dados. No caso de <code class=\"language-text\">forEach()</code>, mesmo que retorne <code class=\"language-text\">undefined</code>, ele <strong>alterará</strong> o array original com o callback.</p>\n<p>Portanto, vemos claramente que <code class=\"language-text\">map()</code> depende da imutabilidade e <code class=\"language-text\">forEach()</code> é um método <strong>modificador</strong>.</p>\n<h3>🚀 Velocidade de desempenho</h3>\n<p>Para você validar a velocidade e desempenho isso depende de várias coisas do computador, a quantidade de dados, processamento, entre outras coisas. Você pode verificar por conta própria com este exemplo abaixo para ver qual é mais rápido.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> items <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\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</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>\n\n<span class=\"token keyword\">const</span> startForEach <span class=\"token operator\">=</span> performance<span class=\"token punctuation\">.</span><span class=\"token function\">now</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nitems<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>x <span class=\"token operator\">+</span> x<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">10000000000</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">const</span> endForEach <span class=\"token operator\">=</span> performance<span class=\"token punctuation\">.</span><span class=\"token function\">now</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><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">Speed [forEach]: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>endForEach <span class=\"token operator\">-</span> startForEach<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\"> miliseconds</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">const</span> startMap <span class=\"token operator\">=</span> performance<span class=\"token punctuation\">.</span><span class=\"token function\">now</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nitems<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>x <span class=\"token operator\">+</span> x<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">10000000000</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">const</span> endMap <span class=\"token operator\">=</span> performance<span class=\"token punctuation\">.</span><span class=\"token function\">now</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><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">Speed [map]: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>endMap <span class=\"token operator\">-</span> startMap<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\"> miliseconds</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\">//return: value: 30</span></code></pre></div>\n<h3>🤓 Conclusão</h3>\n<p>Qual devo utilizar? Como tudo no mundo: Depende. Se você planeja alterar ou usar os dados, é preferível selecionar <code class=\"language-text\">map()</code>, pois ele retorna um novo array com os dados transformados.</p>\n<p>Mas, se você não precisar do array novo, use <code class=\"language-text\">forEach().</code></p>\n<p>Espero que esse post curtinho tenha te ajudado de alguma maneira!</p>\n<blockquote>\n<p>As sugestões e críticas são altamente apreciadas.</p>\n</blockquote>\n<p>Se houver mais diferenças, por favor, compartilhe-as nos comentários, caso contrário, obrigado por chegar até aqui 😍.</p>\n<p><img src=\"https://media.giphy.com/media/l2JI1JzL6YS8z5KUM/giphy.gif\"></p>","timeToRead":3}},"pageContext":{"slug":"/descubra-as-4-diferencas-entre-map-e-foreach/","previousPost":{"fields":{"slug":"/test-in-nodejs/"},"frontmatter":{"templateKey":"blog-post","data":"05 de Fevereiro de 2021","tag":"NodeJs","titulo":"É hora de aprender a testar!","locale":"pt"},"timeToRead":9},"nextPost":{"fields":{"slug":"/flexbox/"},"frontmatter":{"templateKey":"blog-post","data":"19 de Janeiro de 2021","tag":"Programação","titulo":" FlexBox - Guia visual","locale":"pt"},"timeToRead":1},"locale":"pt"}}}