<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: deMenezes</title>
    <description>The latest articles on DEV Community by deMenezes (@demenezes).</description>
    <link>https://dev.to/demenezes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F688590%2Fc7ba74e6-c6ef-4279-95e0-529ade5113eb.jpg</url>
      <title>DEV Community: deMenezes</title>
      <link>https://dev.to/demenezes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/demenezes"/>
    <language>en</language>
    <item>
      <title>Domine loops em Javascript: como iterar sobre qualquer array e array-like</title>
      <dc:creator>deMenezes</dc:creator>
      <pubDate>Sun, 02 Mar 2025 12:15:06 +0000</pubDate>
      <link>https://dev.to/demenezes/domine-loops-em-javascript-como-iterar-sobre-qualquer-array-e-array-like-3oio</link>
      <guid>https://dev.to/demenezes/domine-loops-em-javascript-como-iterar-sobre-qualquer-array-e-array-like-3oio</guid>
      <description>&lt;h2&gt;
  
  
  Ao trabalhar com JavaScript, é importante saber iterar sobre array e array-like. Neste artigo, você aprenderá a dominar loops e iterações.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Shortcut&lt;/strong&gt;: para iterar sobre qualquer lista em Javascript, use o &lt;code&gt;for...of&lt;/code&gt;. Pode usar ainda o &lt;code&gt;forEach&lt;/code&gt; em Nodelist, array e DOMTokenList.&lt;/p&gt;

&lt;p&gt;Aqui estão as principais opções:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;for...of&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;for...in&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;forEach&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;map&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;filter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;find&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;every&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;some&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reduce&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ah e também precisa de mais uma coisa: saber quando usar cada um deles 😅.&lt;/p&gt;

&lt;p&gt;Pode parecer muita coisa, mas com a prática, você entende. E sempre pode voltar aqui para ver como usá-los.&lt;/p&gt;

&lt;p&gt;Eu já escrevi um post para explicar cada um dos últimos 7 itens da lista:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://demenezes.dev/posts/como-usar-foreach-javascript-exemplos/" rel="noopener noreferrer"&gt;Como usar o forEach em Javascript: exemplos detalhados contados em uma história&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://demenezes.dev/posts/map-javascript-array/" rel="noopener noreferrer"&gt;Transforme arrays em ouro: aprenda a manipular dados com o map() em Javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://demenezes.dev/posts/filter-javascript-array/" rel="noopener noreferrer"&gt;Domine o método Filter e simplifique sua lógica com arrays em Javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://demenezes.dev/posts/find-javascript-array/" rel="noopener noreferrer"&gt;O método find e a busca ao modo CTRL + F em JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://demenezes.dev/posts/every-some-javascript-array/" rel="noopener noreferrer"&gt;Every e some: os métodos de array em Javascript que respondem "sim" ou "não"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://demenezes.dev/posts/reduce-array-javascript/" rel="noopener noreferrer"&gt;Quem tem medo do reduce? Entenda esse método agora ou seu dinheiro de volta&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ao final deste artigo, você será capaz de iterar sobre qualquer tipo de lista em JavaScript.&lt;/p&gt;

&lt;p&gt;E para começar, uma pergunta:&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que escrevi "lista" no título do post?
&lt;/h2&gt;

&lt;p&gt;Primeiro porque o blog é meu 😝.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1653006346-tim-mossholder-imld5dbclm4-unsplash-1.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1653006346-tim-mossholder-imld5dbclm4-unsplash-1.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="Escrita " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E segundo porque &lt;strong&gt;array não é o único de tipo de lista no Javascript&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Existem outros tipos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTMLCollection&lt;/strong&gt;: lista de elementos HTML retornada pelos métodos &lt;code&gt;document.getElementsByClassName()&lt;/code&gt; e &lt;code&gt;document.getElementsByTagName()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nodelist&lt;/strong&gt;: representa os filhos de um elemento (&lt;code&gt;element.childNodes&lt;/code&gt;) ou o retorno do método &lt;code&gt;document.querySelectorAll()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DOMTokenlist&lt;/strong&gt;: é a lista de classes de um elemento HTML, você obtém ela com &lt;code&gt;element.classList&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NamedNodeMap&lt;/strong&gt;: é a lista de atributos de um elemento HTML, você obtém ela com &lt;code&gt;element.attributes&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas listas são chamadas de &lt;em&gt;array-like&lt;/em&gt;. Lembra da propaganda "é tipo Net"? Então, array-like é tipo array, mas não é array. Se você rodar &lt;code&gt;Array.isArray()&lt;/code&gt; nelas, verá que o resultado será &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1740534305-comparacao-array-e-array-like.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1740534305-comparacao-array-e-array-like.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="comparação entre array e array-like" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Todas elas (inclusive arrays) têm a propriedade &lt;code&gt;.length&lt;/code&gt;, para descobrir a quantidade de itens. Já expliquei em mais detalhes a &lt;a href="https://demenezes.dev/posts/diferenca-entre-array-htmlcollection-nodelist-domtokenlist-namednodemap/" rel="noopener noreferrer"&gt;diferença entre cada tipo de lista&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Mas aqui o foco é como iterar por elas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como iterar sobre qualquer lista em Javascript
&lt;/h2&gt;

&lt;h3&gt;
  
  
  O todo poderoso &lt;code&gt;for...of&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Apelidei ele carinhosamente de &lt;em&gt;farofa&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Com ele, você pode iterar sobre qualquer iterável.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Veja um exemplo com array:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bolhaDev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;não&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pode&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;usar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;else&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;palavra&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;bolhaDev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;palavra&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// não&lt;/span&gt;
&lt;span class="c1"&gt;// pode&lt;/span&gt;
&lt;span class="c1"&gt;// usar&lt;/span&gt;
&lt;span class="c1"&gt;// else&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A variável &lt;code&gt;palavra&lt;/code&gt; muda a cada iteração do loop, e passa a ser o próximo item da lista. Você pode chamá-la como quiser e como fizer mais sentido. É uma boa prática usar &lt;code&gt;const&lt;/code&gt; antes da variável do loop para evitar que ela seja alterada ali dentro.&lt;/p&gt;

&lt;p&gt;O mesmo vale para HTML Collection e Nodelist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;divs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementsByTagName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// ou...&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;divs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;divs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// todas as divs do site serão jogadas no console uma a uma&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você fez seu dever de casa e leu os posts anteriores, certo? Então sabe que DOMTokenList é um tipo de lista que armazena as classes de um elemento HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;classes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;classes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No código acima eu peguei todas as classes da tag &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; e iterei sobre elas.&lt;/p&gt;

&lt;p&gt;E funciona igual no NamedNodeMap, um array-like que armazena os atributos de um elemento:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;main&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;attribute&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;attribute&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E por fim, você também pode iterar sobre uma string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pisei no trem&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;letra&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;myString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;letra&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// P&lt;/span&gt;
&lt;span class="c1"&gt;// i&lt;/span&gt;
&lt;span class="c1"&gt;// s&lt;/span&gt;
&lt;span class="c1"&gt;// e&lt;/span&gt;
&lt;span class="c1"&gt;// i&lt;/span&gt;
&lt;span class="c1"&gt;// &lt;/span&gt;
&lt;span class="c1"&gt;// n&lt;/span&gt;
&lt;span class="c1"&gt;// o&lt;/span&gt;
&lt;span class="c1"&gt;// &lt;/span&gt;
&lt;span class="c1"&gt;// t&lt;/span&gt;
&lt;span class="c1"&gt;// r&lt;/span&gt;
&lt;span class="c1"&gt;// e&lt;/span&gt;
&lt;span class="c1"&gt;// m&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Existem outros iteráveis que você pode usar com o &lt;code&gt;for...of&lt;/code&gt; como Map, Set e arguments, mas não vou abordar eles por enquanto.&lt;/p&gt;

&lt;p&gt;Dessa forma você consegue iterar sobre qualquer iterável em Javascript.&lt;/p&gt;

&lt;p&gt;Existe outro comando para percorrer listas, mas você não pode usá-lo em qualquer uma.&lt;/p&gt;

&lt;h3&gt;
  
  
  O seletivo &lt;code&gt;forEach&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;O &lt;code&gt;forEach&lt;/code&gt; é seletivo, estilo aquele amigo que não come qualquer sabor de pizza.&lt;/p&gt;

&lt;p&gt;Isso porque ele não está disponível em todos os iteráveis. Você só vai encontrá-lo em:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nodelist (onde mais uso ele)&lt;/li&gt;
&lt;li&gt;Array&lt;/li&gt;
&lt;li&gt;DOMTokenList&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1740534355-comparacao-for-of-e-foreach.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1740534355-comparacao-for-of-e-foreach.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="comparação for of e foreach" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eu uso o &lt;code&gt;forEach&lt;/code&gt; no Nodelist principalmente para alterar elementos da DOM com o &lt;code&gt;querySelectorAll&lt;/code&gt;. Por exemplo, adicionar uma classe em todas as divs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;divs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;divs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wrapper&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você já percebeu que com o &lt;code&gt;for...of&lt;/code&gt; é possível iterar por todas as listas, e com o &lt;code&gt;forEach&lt;/code&gt; por quase todas. Mas quando se fala de array, existem opções adicionais.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arrays: flexibilidade total
&lt;/h2&gt;

&lt;p&gt;Array é uma maravilha.&lt;/p&gt;

&lt;p&gt;Na minha humilde opinião, do alto da minha ignorância, é o melhor tipo de lista. Isso porque &lt;strong&gt;você pode iterar por ela da forma que quiser, com qualquer método, e tudo funciona&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bolhaDev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;não&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pode&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;usar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;else&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;bolhaDev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;palavra&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;palavra&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nx"&gt;bolhaDev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;palavra&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;palavra&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;at&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nx"&gt;bolhaDev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;palavra&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;palavra&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;bolhaDev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;palavra&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;palavra&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;else&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;bolhaDev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;palavra&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;palavra&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;bolhaDev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;palavra&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;palavra&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;bolhaDev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cur&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;cur&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Além, é claro, do &lt;code&gt;for...of&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Isso torna a array mais flexível a qualquer situação de uso. Se você conferir os links que deixei no começo do post, verá como aplicar todos esses métodos numa array.&lt;/p&gt;

&lt;p&gt;Infelizmente, eu não posso fazer os mesmos elogios a outros tipos de iteráveis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Array-like é só isso mesmo?
&lt;/h2&gt;

&lt;p&gt;Parece que array like não serve para nada.&lt;/p&gt;

&lt;p&gt;Porém, eles possuem outros métodos, além de &lt;code&gt;forEach&lt;/code&gt; e &lt;code&gt;.length&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para descobrir tudo que você pode fazer com eles, basta olhar uma documentação, como a MDN. Outra opção muito divertida é olhar o protótipo do array-like no próprio Devtools.&lt;/p&gt;

&lt;p&gt;Se você digitar o nome de uma estrutura de dados seguido de &lt;code&gt;.prototype&lt;/code&gt;, verá todos os métodos disponíveis. Veja o exemplo abaixo com Nodelist:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1740534401-nodelist-prototype-devtools.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1740534401-nodelist-prototype-devtools.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="o protótipo do nodelist no devtools" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora faça o teste com outras estruturas de dados. Funciona inclusive com &lt;code&gt;Array&lt;/code&gt; e &lt;code&gt;Object&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Mesmo com tantos métodos, ainda assim o Nodelist (e qualquer array-like) é mais limitado do que uma array.&lt;/p&gt;

&lt;p&gt;Se você precisa fazer um &lt;code&gt;map&lt;/code&gt; em um Nodelist, por exemplo, terá um erro como esse:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1740534489-erro-map-nodelist.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1740534489-erro-map-nodelist.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="erro no devtools " width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Então, antes você precisa convertê-lo para uma array.&lt;/p&gt;

&lt;h2&gt;
  
  
  Converter array like para array
&lt;/h2&gt;

&lt;p&gt;Aqui está o grande pulo do gato.&lt;/p&gt;

&lt;p&gt;Se você quer usar todo o poder da array, mas tem outra lista em mãos, sem problemas. &lt;strong&gt;É totalmente possível converter essa outra lista para array para trabalhar com mais flexibilidade&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Existem duas formas.&lt;/p&gt;

&lt;p&gt;A primeira é com o método &lt;code&gt;Array.from()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buttonsArrayLike&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buttonsArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;buttonsArrayLike&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;buttonsArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;span class="nx"&gt;buttonsArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;span class="nx"&gt;buttonsArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basta colocar a array like como parâmetro dessa função e pegar o retorno já em formato de array.&lt;/p&gt;

&lt;p&gt;E a segunda forma é com o spread operator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buttonsArrayLike&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buttonsArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;buttonsArrayLike&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;buttonsArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;span class="nx"&gt;buttonsArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;span class="nx"&gt;buttonsArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com ele você &lt;em&gt;espalha&lt;/em&gt; os itens de uma lista. No caso acima, na linha 2, espalha dentro de um novo array, iniciado com os colchetes.&lt;/p&gt;

&lt;p&gt;Ambas soluções possuem o mesmo resultado, basta usar cada uma no momento mais adequado.&lt;/p&gt;

&lt;p&gt;Por fim, existe outra forma de iterar bastante conhecida.&lt;/p&gt;

&lt;h2&gt;
  
  
  E o &lt;code&gt;for...in&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;O &lt;code&gt;for...in&lt;/code&gt; é bem parecido com o &lt;code&gt;for...of&lt;/code&gt;, porém para &lt;strong&gt;objetos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A forma de escrever é igual:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;cleanCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;property&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// else&lt;/span&gt;
&lt;span class="c1"&gt;// cleanCode&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O que aparece no console é apenas a chave do objeto.&lt;/p&gt;

&lt;p&gt;Para acessar algum valor, é preciso usar a notação de colchetes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;cleanCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;property&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;code&gt;for...in&lt;/code&gt; itera apenas sobre as propriedades enumeráveis de um objeto. Isso não inclui métodos herdados do construtor do objeto como o &lt;code&gt;toString()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;E por fim, recomendo que você não altere propriedades do objeto durante o loop. Isso pode causar uma festa danada, bagunçar o loop e gerar comportamentos inesperados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Callback
&lt;/h2&gt;

&lt;p&gt;Existem muitas formas de iterar sobre listas em Javascript. Algumas delas podem ser usadas apenas em arrays, mas com o &lt;code&gt;for...of&lt;/code&gt; (&lt;em&gt;farofa&lt;/em&gt;) é possível percorrer todas elas.&lt;/p&gt;

&lt;p&gt;Nem toda lista é array, mas toda array é uma lista. Array-like faz parte da vida, está tudo bem, e você sempre pode converter para array antes de trabalhar com elas.&lt;/p&gt;

&lt;p&gt;Também é possível iterar sobre as propriedades de um objeto, e acessar seus valores com a notação de colchetes.&lt;/p&gt;

&lt;p&gt;Esse post fecha com chave de ouro junto com os outros onde falei sobre os métodos de array em Javascript, e a diferença entre os tipos de lista. Consegui mostrar quase tudo que você precisa para trabalhar com elas.&lt;/p&gt;

&lt;p&gt;Tem mais coisas? Claro que tem. Mas decorar todos os comandos e possibilidades de uso da linguagem não é o ideal.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>array</category>
      <category>estruturadedados</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>O enigma do visually-hidden: mestre da acessibilidade ou sabotador de SEO?</title>
      <dc:creator>deMenezes</dc:creator>
      <pubDate>Sat, 01 Feb 2025 23:21:42 +0000</pubDate>
      <link>https://dev.to/demenezes/o-enigma-do-visually-hidden-mestre-da-acessibilidade-ou-sabotador-de-seo-pcn</link>
      <guid>https://dev.to/demenezes/o-enigma-do-visually-hidden-mestre-da-acessibilidade-ou-sabotador-de-seo-pcn</guid>
      <description>&lt;h2&gt;
  
  
  Ao usar a técnica visually-hidden você pode acabar fazendo cloaking e penalizando o seu SEO. Clique e veja como não ser banido pelo Google
&lt;/h2&gt;

&lt;p&gt;Vamos começar indo um pouco além do &lt;code&gt;display:none&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Você já usou essa técnica de visually-hidden?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.visually-hidden&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-1px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;-webkit-clip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;clip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;word-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;normal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lembrou? Não? Ela faz a mesma coisa que a classe &lt;a href="https://tailwindcss.com/docs/screen-readers" rel="noopener noreferrer"&gt;sr-only do Tailwind CSS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elas têm o mesmo objetivo: ocultar um elemento visualmente, e deixá-lo disponível apenas para leitores de tela e SEO. E no fim, melhorar a acessibilidade.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Porém isso pode ter um impacto direto no SEO. O Google não vai muito com a sua cara quando você mostra algo para os motores de busca mas oculta dos usuários. E isso pode punir o seu site no rankeamento das pesquisas.&lt;/p&gt;

&lt;p&gt;A intenção aqui não é falar de CSS, e sim do impacto dessa técnica no SEO. Mas só para esclarecer...&lt;/p&gt;

&lt;h2&gt;
  
  
  O que essa técnica faz?
&lt;/h2&gt;

&lt;p&gt;Resumidamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retira do elemento do fluxo normal da página&lt;/li&gt;
&lt;li&gt;Reduz seu tamanho a zero&lt;/li&gt;
&lt;li&gt;E remove espaçamentos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;O visually-hidden oculta um elemento visualmente, mas o mantém disponível para leitores de tela e os robôs do Google.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Assim, você pode acrescentar informações importantes para pessoas cegas ou com baixa visão. E essas informações não irão atrapalhar o layout ou são desnecessárias para pessoas com visão.&lt;/p&gt;

&lt;p&gt;Veja um exemplo desse tipo de informação no site da Apple. Na imagem a seguir, abaixo de cada produto, existe um botão com a label "Saiba mais":&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031265-iphones.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031265-iphones.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="página da apple mostrando modelos de iphone" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para pessoas com visão, está claro o que cada botão "Saiba mais" faz: mostra mais informações &lt;em&gt;sobre o produto daquele contexto&lt;/em&gt;. Mas só isso não basta para a acessibilidade. Como deixar claro para todos o que esses botões fazem?&lt;/p&gt;

&lt;h2&gt;
  
  
  Melhorar a compreensão do botão "Saiba mais"
&lt;/h2&gt;

&lt;p&gt;Se tiver curiosidade, instale um leitor de tela no seu computador.&lt;/p&gt;

&lt;p&gt;Ele irá narrar as informações de cada produto de cima para baixo, e depois passar para o próximo produto. Sempre que o usuário focar no botão "Saiba mais", por padrão o leitor irá narrar apenas "Saiba mais".&lt;/p&gt;

&lt;p&gt;Mas ao longo de uma lista de produtos, isso fica chato e pouco claro. "Saiba mais", "Saiba mais", "Saiba mais"... Saiba mais sobre o que, meu consagrado?&lt;/p&gt;

&lt;p&gt;Existem algumas formas de corrigir isso.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031286-melhorar-a-clareza-dos-textos-descritivos.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031286-melhorar-a-clareza-dos-textos-descritivos.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="gráfico que representa a escolha entre narrativa genérica repetitiva ou informações específicas e claras" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Solução 1: colocar mais informações no botão
&lt;/h3&gt;

&lt;p&gt;Como solução, o front-enzo colocou o nome de cada produto dentro do saiba mais:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031310-pagina-de-iphones-com-o-botao-saiba-mais-alterado-no-front-end-e-adicionado-o-nome-de-cada-produto-apos-o-texto-saiba-mais.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031310-pagina-de-iphones-com-o-botao-saiba-mais-alterado-no-front-end-e-adicionado-o-nome-de-cada-produto-apos-o-texto-saiba-mais.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="página de iphones com o botão saiba mais alterado no front-end, e adicionado o nome de cada produto após o texto " width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora o tamanho do botão depende do tamanho do nome do produto. Isso pode ir contra o design system, além de quebrar facilmente o layout.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solução 2: visually-hidden
&lt;/h3&gt;

&lt;p&gt;Essa é a técnica que comentei lá no começo.&lt;/p&gt;

&lt;p&gt;Você pode fazer assim como na solução 1, porém ocultar visualmente o nome do produto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/br/iphone-16/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
 Saiba mais &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"visually-hidden"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;sobre o iPhone 16&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso fará o botão mostrar apenas o texto "Saiba mais" como label, e o leitor de tela irá narrar "Saiba mais sobre o iPhone 16".&lt;/p&gt;

&lt;p&gt;Mas você cai no problema que contei no início, isso fica disponível apenas para parte dos usuários. Assim, o Google fará um pente fino no seu site.&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://shopify.dev/docs/storefronts/themes/best-practices/theme-editor-preview-inspector#avoid-using-visually-hidden-elements" rel="noopener noreferrer"&gt;Shopify&lt;/a&gt; também não recomenda ocultar algo apenas visualmente por motivos de layout.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solução 3: aria-label
&lt;/h3&gt;

&lt;p&gt;A solução que a Apple adotou nesta página foi colocar o texto completo dentro do atributo &lt;code&gt;aria-label&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031341-aria-label-de-um-botao-no-site-da-apple.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031341-aria-label-de-um-botao-no-site-da-apple.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="aria-label de um botão no site da apple" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Essa me parece a melhor solução até o momento, porque o leitor de tela prioriza o &lt;code&gt;aria-label&lt;/code&gt; em relação ao conteúdo da tag HTML&lt;/strong&gt;. Assim, não é preciso nenhuma técnica obscura para ocultar visualmente as coisas.&lt;/p&gt;

&lt;p&gt;Outras situações que podem exigir o uso do visually-hidden são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Títulos que precisam estar no HTML mas não fazer parte do design&lt;/li&gt;
&lt;li&gt;Textos explicativos adicionais desnecessários para usuários com visão&lt;/li&gt;
&lt;li&gt;Labels de formulários com design minimalista&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mas afinal...&lt;/p&gt;

&lt;h2&gt;
  
  
  Visually-hidden impacta o SEO do site?
&lt;/h2&gt;

&lt;p&gt;Antes de qualquer coisa, você sabe o que é &lt;strong&gt;cloaking&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Segundo o &lt;a href="https://developers.google.com/search/docs/essentials/spam-policies?hl=pt-br#cloaking" rel="noopener noreferrer"&gt;Google, cloaking (camuflagem em português)&lt;/a&gt; é uma técnica para apresentar diferentes conteúdo no site, a depender de quem acessa. Se for um usuário comum, mostra algo; se for um motor de busca, mostra outro. É uma camuflagem do conteúdo.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Isso te lembra algo?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Essa técnica é considerada black hat, pois ela engana o motor de busca para melhorar o rankeamento do site de forma fraudulenta. E caso o Google descubra, irá penalizar seu site.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031360-conteudo-visualmente-oculto-e-seo.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031360-conteudo-visualmente-oculto-e-seo.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="os prós e contras do conteúdo visualmente oculto" width="800" height="730"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Logo, posso concluir que visually-hidden causa cloaking, e logo é ruim. Certo? Mais ou menos.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Na página que linkei acima, o Google usa exemplos muito extremos para explicar o uso de cloaking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Você cria uma página sobre um assunto (medicamento com descontos), mas configura ela para mostrar outro assunto (destinos de viagens) quando for acessada por um motor de busca&lt;/li&gt;
&lt;li&gt;Você insere palavras "invisíveis" na página que o usuário não vê, mas aparecem para os robôs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso parece mal intencionado, mais do que ocultar algumas palavras dentro de um botão "Saiba mais".&lt;/p&gt;

&lt;p&gt;Afinal, visually hidden é cloaking? A diferença entre o remédio e o veneno é a dose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Se usar o visually-hidden com cuidado, não haverá problemas. Mas se abusar, isso facilmente se encaixao como cloaking.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Se o google é realmente inteligente, ele vai perceber que o visually-hidden serve apenas para não quebrar o layout e melhorar a acessibilidade, em vez de mostrar conteúdos completamente diferentes, aplicar golpes, spam, etc.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agora não pense em algo pequeno demais, como um texto dentro de um botão; ou grandioso demais, como o assunto principal da página. Veja um meio termo: ocultar a tag H1.&lt;/p&gt;

&lt;p&gt;Se você já estudou um pouco sobre HTML semântico e SEO, sabe que essa tag é essencial para o rankeamento do site. E se eu ocultar ela?&lt;/p&gt;

&lt;h2&gt;
  
  
  Aplicar visually-hidden no H1 da página impacta no SEO?
&lt;/h2&gt;

&lt;p&gt;A tag H1 do HTML é uma das mais importantes da página.&lt;/p&gt;

&lt;p&gt;Ela é responsável por descrever o assunto principal. Porém, às vezes esse assunto é tão claro que fica redundante exibir um H1. E você opta por aplicar um visually-hidden ou nem colocá-la no HTML.&lt;/p&gt;

&lt;p&gt;Como eu disse alguns parágrafos acima, espero que os robôs do Google realmente sejam inteligentes. Se o cloaking é aplicado em diversas páginas do site em conteúdos grandes, muitas tags HTML, etc... um sinal de alerta deve ser ligado. Por outro lado, se você faz pouco uso disso, espera-se que o Google não seja tão linha dura.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031382-uso-extensivo-e-uso-minimo-de-cloaking.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031382-uso-extensivo-e-uso-minimo-de-cloaking.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="uso extensivo e uso mínimo do visually-hidden" width="800" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ocultar a tag H1 apenas da página inicial, por exemplo, é completamente compreensível. Mas o mesmo não se aplica a uma subpágina como um post de blog, pois ele perderia relevância nas pesquisas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como você pode ver, são muitas questões, e pouco se fala que SEO é uma junção de fatores. Se você ocultar o H1, o Google não não irá lhe banir para sempre. Assim como se você usar as palavras-chave certas, não será automaticamente movido para o topo das pesquisas.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dito isso, seo on-page é apenas um dos fatores. Então faça o menor (ou nenhum) uso de cloaking possível, enquanto cuida de outros fatores, como:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backlinks&lt;/li&gt;
&lt;li&gt;CTR&lt;/li&gt;
&lt;li&gt;Tempo de permanência na página&lt;/li&gt;
&lt;li&gt;Bounce rate&lt;/li&gt;
&lt;li&gt;Entre outros&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recomendo muito que você leia esse artigo sobre &lt;a href="https://www.npmjs.com/package/test-lib-npm-andre-menezes" rel="noopener noreferrer"&gt;o impacto no SEO de ocultar o H1 na página inicial de um site&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A liderança mandou eu fazer cloaking. E agora?
&lt;/h2&gt;

&lt;p&gt;Ok, você já sabe (quase) tudo sobre visually-hidden e cloaking.&lt;/p&gt;

&lt;p&gt;Mas a pessoa techlead chegou e disse que é para fazer mesmo assim. Nesse caso você pode tomar alguns cuidados.&lt;/p&gt;

&lt;h3&gt;
  
  
  Estilizar o H1
&lt;/h3&gt;

&lt;p&gt;Use o CSS ao seu favor.&lt;/p&gt;

&lt;p&gt;Sugira ao time abandonar a tag HTML H1 com o estilo default, um texto grande, em bold e com destaque. E em vez disso, estilizá-lo para parecer um parágrafo comum.&lt;/p&gt;

&lt;p&gt;Assim você mantém o mesmo conteúdo para todos os usuários e robôs de busca, sem quebrar o layout.&lt;/p&gt;

&lt;h3&gt;
  
  
  Oculte o conteúdo com Javascript
&lt;/h3&gt;

&lt;p&gt;Outra técnica que vejo muito acontecer é ocultar conteúdo com Javascript.&lt;/p&gt;

&lt;p&gt;Isso tem um problema. Na maioria das vezes, o Javascript só executa após toda a página montar. Então pode ser que o usuário veja o conteúdo, e alguns segundos depois ele suma. Para a experiência do usuário, estabilidade da página e evitar &lt;a href="https://web.dev/articles/cls?hl=pt-br" rel="noopener noreferrer"&gt;CLS (cumulative layout shift)&lt;/a&gt;, isso é horrível.&lt;/p&gt;

&lt;p&gt;Então pense bem.&lt;/p&gt;

&lt;h3&gt;
  
  
  O Google baniu ou penalizou meu site e olha no que deu
&lt;/h3&gt;

&lt;p&gt;Para finalizar as dicas, procure pelo Google Search Console.&lt;/p&gt;

&lt;p&gt;Essa ferramenta serve para você monitorar como um site performa nas buscas, com dados sobre:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quantidade de cliques&lt;/li&gt;
&lt;li&gt;Principais palavras-chave&lt;/li&gt;
&lt;li&gt;Etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ele também irá te sinalizar sobre problemas de indexação das suas páginas. Recomendo ver esses alertas e relatórios com frequência e corrigir o quanto antes quando algo surgir.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031398-fluxo-de-uso-do-google-search-console.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1738031398-fluxo-de-uso-do-google-search-console.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="fluxo de uso do google search console" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se você já leu tudo na internet sobre SEO, maratonou o demenezes.dev (cof cof), e mesmo assim deu problema no SEO, pode consultar esse guia sobre &lt;a href="https://web.dev/articles/hacked?hl=pt-br" rel="noopener noreferrer"&gt;como corrigir sites invadidos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Além disso, sites que aplicam paywall (para exibir conteúdo apenas para usuários autenticados) podem sofrer do mesmo problema. E o Google tem uma documentação para &lt;a href="https://developers.google.com/search/docs/appearance/flexible-sampling?hl=pt-br" rel="noopener noreferrer"&gt;amostragem flexível (paywall)&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Callback
&lt;/h2&gt;

&lt;p&gt;A técnica de visually-hidden serve para ocultar visualmente um conteúdo do site, mas mantê-lo disponível para leitores de tela e robôs de busca.&lt;/p&gt;

&lt;p&gt;Você pode usar ela na melhor das intenções, como por exemplo manter a boa acessibilidade sem quebrar o layout. Mas alguns casos podem se encaixar em cloaking, uma técnica black hat de SEO mais desencorajada do que Javascript no back-end (brincadeira).&lt;/p&gt;

&lt;p&gt;Visually-hidden não necessariamente penaliza o SEO do seu site, mas cloaking sim.&lt;/p&gt;

&lt;p&gt;Ocultar visualmente o H1 de uma página pode não ser prejudicial, desde que isso se aplique à página inicial.&lt;/p&gt;

&lt;p&gt;Se você já tomou todos os cuidados e mesmo assim precisa aplicar o visually-hidden, use algumas alternativas. Você pode estilizar o H1 de uma forma que não prejudique o layout, ou um conteúdo com Javascript (sempre cuidando do CLS).&lt;/p&gt;

&lt;p&gt;Por fim, mantenha o seu site conectado ao Google Search Console para ser notificado de possíveis problemas de SEO.&lt;/p&gt;

&lt;p&gt;Se você está lendo aqui, imagino que SEO seja algo importante no seu trabalho, ou pelo menos está nos seus interesses. Então te convido a ler esse artigo sobre &lt;a href="https://demenezes.dev/posts/imagem-sem-alt-text-texto-alternativo/" rel="noopener noreferrer"&gt;como evitar que imagens sem texto alternativo afetem o SEO e acessibilidade&lt;/a&gt; do seu site.&lt;/p&gt;

&lt;p&gt;Esse tema sempre me desperta muita curiosidade, pois SEO é a intersecção do front-end com marketing. E isso impacta diretamente no dinheiro que entra no bolso da empresa. Sem falar que minha primeira &lt;a href="https://demenezes.dev/posts/mudar-de-carreira-marketing-programacao/" rel="noopener noreferrer"&gt;formação foi em marketing&lt;/a&gt;, antes de fazer a migração para a área de desenvolvimento.&lt;/p&gt;

&lt;p&gt;Muito obrigado pela sua leitura. Deixe seu comentário caso tenha dúvidas, ou para agregar no conteúdo. Vou ficar muito feliz em ler :)&lt;/p&gt;

</description>
      <category>css</category>
      <category>seo</category>
      <category>a11y</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Fui na Codecon Summit 2024 e olha no que deu</title>
      <dc:creator>deMenezes</dc:creator>
      <pubDate>Thu, 26 Sep 2024 11:13:21 +0000</pubDate>
      <link>https://dev.to/demenezes/fui-na-codecon-summit-2024-e-olha-no-que-deu-58hd</link>
      <guid>https://dev.to/demenezes/fui-na-codecon-summit-2024-e-olha-no-que-deu-58hd</guid>
      <description>&lt;h2&gt;
  
  
  A Codecon Summit 2024 é um evento de tecnologia que conta com palestras, bate papos, networking, dinâmicas, brindes, bebedeiras... não pera
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;E aí, vai escrever um post sobre o evento?&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Gabriel Nunes, organizador da Codecon"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;Ouvi isso ao final da Codecon quando fui cumprimentar o Gabriel e parabenizá-lo pelo evento.&lt;/p&gt;

&lt;p&gt;Nem eu lembrava que tinha blog haha.&lt;/p&gt;

&lt;p&gt;Em 2024 tive que fazer uma pausa nele por questão de tempo. Mas me obriguei a vir relatar como foi ir de Porto Alegre até Joinville na Codecon Summit 2024.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como foi a Codecon Summit 2024
&lt;/h2&gt;

&lt;p&gt;Pouco depois da Codecon Summit de 2023, abriram as vendas dos ingressos para o evento desse ano.&lt;/p&gt;

&lt;p&gt;Como um bom procrastinador, deixei para comprar só esse ano. Assim como hospedagem e transporte.&lt;/p&gt;

&lt;p&gt;Saí de Porto Alegre com mais alguns amigos da nossa comunidade daqui, o &lt;a href="https://gdg.community.dev/gdg-porto-alegre/" rel="noopener noreferrer"&gt;GDG Porto Alegre&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Quando chegamos, vi tudo muito bonito e organizado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227057-fila-do-evento-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227057-fila-do-evento-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="fila do evento codecon summit 2024" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Muitos stands de patrocinadores com dinâmicas, jogos e brindes. Qual não foi minha surpresa ao ganhar um boné da &lt;a href="https://motoristapx.com.br/" rel="noopener noreferrer"&gt;Motorista PX&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227043-andre-menezes-com-um-bone-da-motorista-px-assistindo-a-palestra-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227043-andre-menezes-com-um-bone-da-motorista-px-assistindo-a-palestra-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="andré menezes com um boné da motorista px assistindo à palestra da codecon summit 2024" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Havia um auditório gigante chamado Palco Plenária, e uma sala lateral menor chamada Meet&amp;amp;Cookies. Chamei o Plenária de Palco Principal ou Palco Mundo o evento todo.&lt;/p&gt;

&lt;p&gt;Além disso, os palestrantes batiam um papo mais próximo com os participantes na sala Escovando Bits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227106-stand-da-empresas-asaas-na-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227106-stand-da-empresas-asaas-na-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="stand da empresas asaas na codecon summit 2024" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sem falar na sala com boardgame e RPG que (infelizmente) não tive tempo de conferir.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227081-pessoas-jogando-board-game-e-rpg-na-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227081-pessoas-jogando-board-game-e-rpg-na-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="pessoas jogando board game e rpg na codecon summit 2024" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A sensação é de que havia muitas atividades para fazer, e as pessoas se distribuíram em todas elas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227115-uma-pessoa-jogando-caca-palavrasa-em-uma-parede-no-topo-escrito-e-bom-em-cacar-bugs-a-palavra-bugs-esta-riscada-palavras.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227115-uma-pessoa-jogando-caca-palavrasa-em-uma-parede-no-topo-escrito-e-bom-em-cacar-bugs-a-palavra-bugs-esta-riscada-palavras.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="uma pessoa jogando caça palavrasa em uma parede, no topo escrito -é bom em caçar bugs (a palavra bugs está riscada) palavras--" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para quem lembra do Code Codes que acontecia também na &lt;a href="https://demenezes.dev/posts/codecon-2022/" rel="noopener noreferrer"&gt;Codecon Online&lt;/a&gt;, a tradição se manteve. Nesse jogo você deve encontrar códigos espalhados pelo evento e inserir no aplicativo. Assim você acumula pontos e concorre a brindes absurdos no final do evento (exemplo: PlayStation 5).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227095-stand-da-alura-na-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227095-stand-da-alura-na-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="stand da alura na codecon summit 2024" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesse evento, houve uma história complicada.&lt;/p&gt;

&lt;p&gt;A plataforma do jogo começou a passar por instabilidades. Os organizadores descobriram que alguns participantes descobriram como acessar o admin do sistema. E lá, eles geraram códigos aleatórios e usaram no jogo. Em pouco tempo, essas pessoas chegaram aos 500 mil pontos, enquanto ainda havia pessoas com 30mil.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227070-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227070-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="codecon summit 2024" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Os detalhes você encontra no &lt;a href="https://www.linkedin.com/posts/gabrielnunes_passei-por-dois-grandes-momentos-de-stress-activity-7238984889776128000-hlq3/?utm_source=share&amp;amp;utm_medium=member_desktop" rel="noopener noreferrer"&gt;post do Gabriel no Linkedin&lt;/a&gt; e no &lt;a href="https://codecon.dev/blog/relatorio-de-incidente-06-09-2024" rel="noopener noreferrer"&gt;site da Codecon&lt;/a&gt;. É importante ler esses links para entender como a organização percebeu e corrigiu o problema. Ou seja, trocou a roda com o carro andando mesmo.&lt;/p&gt;

&lt;p&gt;Foi então que as palestras começaram.&lt;/p&gt;

&lt;h2&gt;
  
  
  Palestras que mais gostei
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;Mano Deyvin&lt;/strong&gt; trouxe a talk sobre &lt;strong&gt;Verdades duras de engolir&lt;/strong&gt;. Falou sobre o mercado de trabalho da forma mais crua, como a comunidade já conhece.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227128-mano-deivyn-no-palco-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227128-mano-deivyn-no-palco-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="mano deivyn no palco da codecon summit 2024" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O ponto mais interessante que ele trouxe foi sobre &lt;em&gt;as empresas que não estão no Linkedin&lt;/em&gt;. Ele trouxe um slide com um gráfico sobre as empresas de tecnologia de Joinville, e mostrou que tem muitas formas de conseguir sua oportunidade no mercado, sem ser em redes sociais.&lt;/p&gt;

&lt;p&gt;Infelizmente não lembro da fonte dos gráficos dele nem consegui tirar foto do slide a tempo (peço perdão pelo vacilo).&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Jéssica Félix&lt;/strong&gt; foi outra pessoa que brilhou demais na palestra sobre escalabilidade de projetos web.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227139-jessica-felix-no-palco-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227139-jessica-felix-no-palco-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="jéssica félix no palco da codecon summit 2024" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ficou muito claro que de um ponto em diante, a palestra ficou "sênior demais para mim", o conteúdo era de qualidade mesmo.&lt;/p&gt;

&lt;p&gt;Já no outro palco da Codecon Summit 2024, o Meet&amp;amp;Cookies, acompanhei uma palestra onde o &lt;strong&gt;Rafael Camargo&lt;/strong&gt;. Ele criou um framework React com menos de 100 linhas. Muito interessantes os conceitos sobre hooks, server e client components, server actions, etc.&lt;/p&gt;

&lt;p&gt;Aleatoriedade: do nada, o Silvio Santos subiu ao palco para animar a galera e jogar aviõezinhos. Não me pergunte nada, isso apenas aconteceu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227156-silvio-santos-no-palco-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227156-silvio-santos-no-palco-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="silvio santos no palco da codecon summit 2024" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Vitor Norton&lt;/strong&gt; falou sobre o código que existe por trás da colaboração, no seu trabalho na &lt;a href="https://superviz.com/" rel="noopener noreferrer"&gt;Superviz&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227172-vitor-norton-no-palco-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227172-vitor-norton-no-palco-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="vitor norton no palco da codecon summit 2024" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O mais interessante foi que no início da palestra ele não falou sobre código, tecnologia, ou outras coisas "frias". Ele falou sobre colaboração mesmo. Uma maneira bem cativante de começar a apresentação.&lt;/p&gt;

&lt;p&gt;Mais tarde, a &lt;strong&gt;Jéssica Félix&lt;/strong&gt; e o &lt;strong&gt;Elton Mineto&lt;/strong&gt; fizeram um painel super legal sobre carreira.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227183-jessica-felix-e-elton-mineto-no-palco-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227183-jessica-felix-e-elton-mineto-no-palco-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="jéssica félix e elton mineto no palco da codecon summit 2024" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Falaram sobre as idas e vindas da carreira deles, e a importância de dar um passo atrás em alguns momentos.&lt;/p&gt;

&lt;p&gt;Voltando ao Palco Plenária, a palestra que mais me marcou foi justamente o fechamento. Nela, o &lt;strong&gt;Diego Fernandes&lt;/strong&gt; falou sobre como os vídeos funcionam e como fez a plataforma de cursos da Rocketseat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227197-diego-fernandes-da-rocketseat-no-palco-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227197-diego-fernandes-da-rocketseat-no-palco-da-codecon-summit-2024.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="diego fernandes da rocketseat no palco da codecon summit 2024" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Toda a palestra foi bastante técnica, ao mesmo tempo que foi acessível e importante para quem quer trabalhar no mundo dos vídeos e streamings.&lt;/p&gt;

&lt;p&gt;Se você quiser, pode ver as apresentações do &lt;a href="https://drive.google.com/drive/folders/1rfGmLSYb0jqmOHe9aZuU81Lac2RIkLh3" rel="noopener noreferrer"&gt;Palco Plenária&lt;/a&gt; e do &lt;a href="https://drive.google.com/drive/folders/1lfRIhr8JcSrhQJMkiMMQMo6g5BE0MNhk" rel="noopener noreferrer"&gt;Meet&amp;amp;Cookies&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mas geralmente não só de palestras vivem os eventos.&lt;/p&gt;

&lt;h2&gt;
  
  
  O tão desejado patinho amarelo
&lt;/h2&gt;

&lt;p&gt;Só o desejo explica a fila enorme que se formou para pegar o patinho amarelo na máquina de pegar bichinhos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227218-uma-pessoa-tentando-pegar-um-patinho-amarelo-em-uma-maquina-de-pegar-bichinho.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1727227218-uma-pessoa-tentando-pegar-um-patinho-amarelo-em-uma-maquina-de-pegar-bichinho.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="uma pessoa tentando pegar um patinho amarelo em uma máquina de pegar bichinho" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Uma amiga passou mais da metade do evento nessa fila, sem sucesso.&lt;/p&gt;

&lt;p&gt;Quando a Codecon Summit 2024 acabou, ela viu que ainda havia patinhos na máquina já desligada. Assim que as pessoas começaram a sair do auditório, fomos até o Gabriel (organizador do evento) pedir um patinho. Ele atendeu ao pedido na mesma hora, o que foi muito legal.&lt;/p&gt;

&lt;p&gt;Nesse momento aconteceu a cena que contei lá no começo do post.&lt;/p&gt;

&lt;p&gt;Além dos patinhos, havia outros brindes. Um deles caiu no meu colo: uma dose dupla de chope no bar que iríamos no pós evento.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pós evento
&lt;/h2&gt;

&lt;p&gt;Em frente ao local do evento existe o Gutbrau, bar onde todos nos reunimos para nos divertirmos. Curiosamente foi o mesmo bar que fui após a &lt;a href="https://demenezes.dev/posts/codecon-summit-presencial-2023/" rel="noopener noreferrer"&gt;Codecon Summit 2023&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Esses momentos de descontração após os eventos, sem falar de código ou de trabalho, é quando a comunidade mais se aproxima.&lt;/p&gt;

&lt;h2&gt;
  
  
  Valeu a pena
&lt;/h2&gt;

&lt;p&gt;Se eu iria de novo?&lt;/p&gt;

&lt;p&gt;Sempre valeu a pena comparecer em eventos presenciais da comunidade. Seja pelo conhecimento, networking, ou por reforçar aquela vontade de se aprofundar e estudar cada vez mais sobre tecnologia.&lt;/p&gt;

&lt;p&gt;Como você pode ver, eu estive lá na edição do ano passado, compareci nas duas &lt;a href="https://demenezes.dev/posts/codecon-online-2023/" rel="noopener noreferrer"&gt;versões online da Codecon feitas no Gather&lt;/a&gt;... e se possível estarei presente nos próximos anos também.&lt;/p&gt;

&lt;p&gt;E aí, vou te encontrar por lá?&lt;/p&gt;

</description>
      <category>codeconsummit2024</category>
      <category>eventotech</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>De bits a posts: vantagens, desafios e métricas da produção de conteúdo de tecnologia em 2023</title>
      <dc:creator>deMenezes</dc:creator>
      <pubDate>Sun, 31 Dec 2023 17:13:58 +0000</pubDate>
      <link>https://dev.to/demenezes/de-bits-a-posts-vantagens-desafios-e-metricas-da-producao-de-conteudo-de-tecnologia-em-2023-50o9</link>
      <guid>https://dev.to/demenezes/de-bits-a-posts-vantagens-desafios-e-metricas-da-producao-de-conteudo-de-tecnologia-em-2023-50o9</guid>
      <description>&lt;h2&gt;
  
  
  Veja como ter ideias para produzir conteúdo de tecnologia, vantagens, desafios e métricas de um blog em 2023.
&lt;/h2&gt;

&lt;p&gt;Eu levei 12 horas e 50 minutos para escrever o post mais demorado do blog, sobre os &lt;a href="https://demenezes.dev/posts/diferenca-entre-array-htmlcollection-nodelist-domtokenlist-namednodemap/https:/demenezes.dev/posts/diferenca-entre-array-htmlcollection-nodelist-domtokenlist-namednodemap/"&gt;diferentes tipos de array&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;O mais rápido, sobre o evento &lt;a href="https://demenezes.dev/posts/codecon-summit-presencial-2023/https:/demenezes.dev/posts/codecon-summit-presencial-2023/"&gt;Codecon Summit 2023&lt;/a&gt; em Joinville, levou 2 horas e 10 minutos.&lt;/p&gt;




&lt;p&gt;Nesse post que fecha o ano, resolvi escrever sobre como foi produzir conteúdo de tecnologia em 2023:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Como faço para escrever os posts aqui do blog&lt;/li&gt;
&lt;li&gt;Um breve histórico de tudo que já aconteceu&lt;/li&gt;
&lt;li&gt;Pontos positivos&lt;/li&gt;
&lt;li&gt;Desafios&lt;/li&gt;
&lt;li&gt;E alguns números do blog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Espero que esse conteúdo te ajude de alguma forma, principalmente se você pretende produzir conteúdo ou já faz.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como escrevo os posts sobre tecnologia no blog
&lt;/h2&gt;

&lt;p&gt;Para mim, checklists sempre funcionam muito bem.&lt;/p&gt;

&lt;p&gt;Tenho um checklist para produção de conteúdo que me acompanha há muito tempo. Já fiz muitas adaptações nele e hoje divido as tarefas em 7 fases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Planejamento&lt;/li&gt;
&lt;li&gt;Criação&lt;/li&gt;
&lt;li&gt;Imagens&lt;/li&gt;
&lt;li&gt;Revisão&lt;/li&gt;
&lt;li&gt;Título&lt;/li&gt;
&lt;li&gt;Publicação&lt;/li&gt;
&lt;li&gt;Divulgação&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Planejamento
&lt;/h3&gt;

&lt;p&gt;O &lt;strong&gt;planejamento&lt;/strong&gt; é o começo  de tudo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S0cxW7bV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779600-uma-mesa-com-notebook-caneca-post-its-celular-caderno-e-lapis.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S0cxW7bV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779600-uma-mesa-com-notebook-caneca-post-its-celular-caderno-e-lapis.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="uma mesa com notebook, caneca, post-its, celular, caderno e lápis" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Faço pesquisa de palavras-chave, vejo outros conteúdos no Google e YouTube, e tópicos para escrever no post.&lt;/p&gt;

&lt;h3&gt;
  
  
  Criação
&lt;/h3&gt;

&lt;p&gt;A etapa de &lt;strong&gt;criação&lt;/strong&gt; é a mais demorada e a mais difícil de todas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jd99GU6m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779627-maos-sujas-de-tinta-simbolizando-a-criacao.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jd99GU6m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779627-maos-sujas-de-tinta-simbolizando-a-criacao.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="mãos sujas de tinta simbolizando a criação" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No começo, eu crio o esqueleto do post em formato de títulos e subtítulos, ordeno eles, e depois escrevo o corpo deles. Nessa parte também faço novas pesquisas, estudo sobre o conteúdo e testo todos os códigos.&lt;/p&gt;

&lt;p&gt;Escrevo o último capítulo que chamo de Callback, ele serve para retomar todo o conteúdo de forma resumida.&lt;/p&gt;

&lt;p&gt;Outra parte bem importante é criar "ligações" entre os capítulos. É estranha a sensação de parecer que cada capítulo é um texto isolado, então eu conecto eles com frases lógicas. Isso ajuda a justificar a ordem que escolhi para eles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Imagens
&lt;/h3&gt;

&lt;p&gt;Apenas quando necessário, eu apoio o conteúdo com &lt;strong&gt;imagens&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DcGO70wE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779659-muitas-pinturas-coloridas-em-uma-parede-na-rua-na-calcada-o-autor-das-obras-sentado.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DcGO70wE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779659-muitas-pinturas-coloridas-em-uma-parede-na-rua-na-calcada-o-autor-das-obras-sentado.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="muitas pinturas coloridas em uma parede na rua, na calçada o autor das obras sentado" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quando as imagens ajudam a transmitir a mensagem, essa parte é bem demorada, já que preciso produzir ou pesquisar por elas.&lt;/p&gt;

&lt;p&gt;Então vou atrás das imagens que preciso usar no corpo do post, imagem de capa, otimizo, e subo para o post. Além de preencher o texto alternativo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Revisão
&lt;/h3&gt;

&lt;p&gt;Essa etapa talvez seja uma das mais chatas, mas uma das que mais gera valor: &lt;strong&gt;revisão&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s90HrfhM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779715-uma-menina-em-frente-a-um-notebook-revisando-um-conteudo.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s90HrfhM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779715-uma-menina-em-frente-a-um-notebook-revisando-um-conteudo.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="uma menina em frente a um notebook revisando um conteúdo" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;É aqui que eu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Corrijo erros&lt;/li&gt;
&lt;li&gt;Removo palavras repetidas&lt;/li&gt;
&lt;li&gt;Destaco trechos em negrito&lt;/li&gt;
&lt;li&gt;Troco palavras difíceis por outras mais simples&lt;/li&gt;
&lt;li&gt;Diminuo trechos longos&lt;/li&gt;
&lt;li&gt;Removo verbos em terceira pessoa, gerúndio e voz passiva em excesso&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;É incrível como o texto sobe de nível com a revisão. Não acredito que o conteúdo possa sair pronto de primeira, então eu escrevo sem muito apego, e faço a revisão logo após.&lt;/p&gt;

&lt;p&gt;E para finalizar, depois de uma noite de sono eu faço uma leitura final para garantir que fiz o meu melhor. Esse tempo antes de reler é muito bom, pois destaca alguns problemas do texto que antes não estavam claros.&lt;/p&gt;

&lt;p&gt;Já usei a etapa de revisão para alterar completamente a estrutura do post.&lt;/p&gt;

&lt;p&gt;Quando falei sobre o &lt;a href="https://demenezes.dev/posts/como-usar-foreach-javascript-exemplos/"&gt;forEach em Javascript&lt;/a&gt;, transformei todo o texto em uma história. Nela, você está no seu primeiro dia de trabalho como pessoa desenvolvedora e recebe tarefas. Conforme elas chegam, eu mostro como resolvê-las com o forEach.&lt;/p&gt;

&lt;p&gt;Foi bastante trabalhoso, mas acredito que ficou muito superior a um simples tutorial.&lt;/p&gt;

&lt;h3&gt;
  
  
  Título
&lt;/h3&gt;

&lt;p&gt;O &lt;strong&gt;título&lt;/strong&gt; é uma das etapas mais legais.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qKIR2feB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779742-diversas-lombadas-de-livros-com-seus-titulos.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qKIR2feB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779742-diversas-lombadas-de-livros-com-seus-titulos.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="diversas lombadas de livros com seus títulos" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Porque é como se eu precisasse escrever outro texto, mas que deve ter entre 80 e 100 caracteres. Depois disso adapto o título para aparecer no Google, com até 65 caracteres, crio a descrição curta do post e o texto da URL.&lt;/p&gt;

&lt;h3&gt;
  
  
  Publicação
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;publicação&lt;/strong&gt; é a etapa mais rápida e mais prazerosa de todas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--El1WWF__--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779771-uma-parede-de-tijolos-com-duas-caixas-postais-penduradas.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--El1WWF__--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779771-uma-parede-de-tijolos-com-duas-caixas-postais-penduradas.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="uma parede de tijolos com duas caixas postais penduradas" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mais rápida porque eu apenas clico em "Publicar". Também crio link nos posts antigos apontando para o novo, mas apenas quando existe uma relação entre os conteúdos.&lt;/p&gt;

&lt;p&gt;E mais prazerosa porque é o momento de ver o que o mundo achou daquilo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Divulgação
&lt;/h3&gt;

&lt;p&gt;Apesar de parecer, ainda não acabou o trabalho com esse post.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_drLaNk7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779802-um-outdoor-em-branco-com-arvores-ao-redor.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_drLaNk7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779802-um-outdoor-em-branco-com-arvores-ao-redor.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="um outdoor em branco com árvores ao redor" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesse momento já estou com vontade de iniciar o próximo texto, mas é muito importante fazer a parte de &lt;strong&gt;divulgação&lt;/strong&gt;. Apesar de eu achar que ainda não faço isso muito bem. &lt;/p&gt;

&lt;p&gt;Eu reproduzo todo o conteúdo no &lt;a href="https://medium.com/@demenezes"&gt;Medium&lt;/a&gt; e &lt;a href="https://dev.to/demenezes"&gt;dev.to&lt;/a&gt;, com uma URL canônica que aponta para o meu blog, como conteúdo original. Também publico uma prévia no &lt;a href="https://www.tabnews.com.br/deMenezes"&gt;Tabnews&lt;/a&gt; e um link que aponta para o blog.&lt;/p&gt;

&lt;p&gt;Outra divulgação é via &lt;a href="https://twitter.com/aaamenezes"&gt;Twitter&lt;/a&gt;. Eu sempre crio uma thread com o conteúdo. É um formato que a galera gosta bastante, compartilha, favorita e me segue. Porém caiu muito o engajamento depois que desativaram o @sseraphini.&lt;/p&gt;

&lt;p&gt;Os últimos lugares que divulgo é em alguns servidores de Discord e um grupo dos devs da firma.&lt;/p&gt;

&lt;p&gt;Agora fico um ou dois dias sem mexer no blog, até para aliviar a cabeça.&lt;/p&gt;

&lt;p&gt;Agora sim, posso começar um post novo.&lt;/p&gt;

&lt;p&gt;Mas antes de escrever, eu preciso ter ideias para saber o que escrever.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como ter ideias para produzir conteúdo de tecnologia?
&lt;/h2&gt;

&lt;p&gt;Tendo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V3hUvQZ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1653006346-tim-mossholder-imld5dbclm4-unsplash-1.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V3hUvQZ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1653006346-tim-mossholder-imld5dbclm4-unsplash-1.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt='Escrita "laugh" em letra neon (risada em inglês)' width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aposto que a internet atualmente responde a pergunta "como ter ideias para meu blog?" com "use uma uma IA". Particularmente, não gosto.&lt;/p&gt;

&lt;p&gt;As ideias que eu escrevo são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coisas que apliquei no trabalho e foram desafiadoras (como o &lt;a href="https://demenezes.dev/posts/atributo-loading-lazy/"&gt;atributo loading=lazy&lt;/a&gt; e &lt;a href="https://demenezes.dev/posts/como-fazer-lazyload/"&gt;como fazer lazyload&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Conhecimentos fundamentais de web que aprendi e posso reler o post no futuro (como &lt;a href="https://demenezes.dev/posts/css-box-model-elementos-tamanhos-inesperados/"&gt;box model&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Conhecimentos que eu considero importantes para quem está começando (como &lt;a href="https://demenezes.dev/posts/diferenca-entre-array-htmlcollection-nodelist-domtokenlist-namednodemap/"&gt;os diferentes tipos de array em Javascript&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Experiências pessoais (esse post aqui é um caso)&lt;/li&gt;
&lt;li&gt;E a partir do ano que vem, quero escrever mais sobre projetos (aguarde...)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como você pode perceber, os temas têm uma relação muito pessoal comigo. Nenhuma IA ia sugerir um tema nessa linha que me agradasse.&lt;/p&gt;

&lt;p&gt;Então, com os tópicos acima em mente, &lt;strong&gt;sempre que penso em algum tema, adiciono ele no backlog do blog&lt;/strong&gt;. Quando chega o dia de produzir um novo conteúdo, apenas pego do backlog aquele que mais me agrada e começo a escrever. Faço isso para não precisar pensar no que escrever a cada novo post. &lt;/p&gt;

&lt;p&gt;Outras fontes de temas muito interessantes são blogs de fora do Brasil. No dia de escrever faço uma longa pesquisa para que meu post não fique uma cópia de outro blog.&lt;/p&gt;

&lt;p&gt;Mas todo esse trabalho deve gerar alguma coisa boa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conquistas: o que eu ganhei com tudo isso?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Conhecimento para desenvolver o blog
&lt;/h3&gt;

&lt;p&gt;Sem dúvidas, a maior conquista nisso tudo foi o &lt;strong&gt;conhecimento&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Antes de começar, fiz uma longa pesquisa de referências, com print de componentes, e criei o style guide.&lt;/p&gt;

&lt;p&gt;Depois, adquiri muito conhecimento para programar o blog. Pratiquei muito React, Styles Components e NextJS. Nesse último, entendi sobre server side render e static site generator.&lt;/p&gt;

&lt;p&gt;Eu usei um &lt;a href="https://github.com/vercel/next.js/tree/canary/examples/blog-starter"&gt;template da Vercel para iniciar o blog&lt;/a&gt;, mas fiz muitas alterações nele. Uma delas foi criar paginação dos posts que não existia.&lt;/p&gt;

&lt;p&gt;A outra foi mudar a origem dos posts. Originalmente, eles são arquivos markdown no repositório, porém mudei para escrever no DatoCMS. Isso foi outro salto de conhecimento para aprender a usar um CMS headless, consumir uma API GraphQL e descobrir as libs &lt;code&gt;datocms-structured-text-utils&lt;/code&gt; e &lt;code&gt;react-datocms&lt;/code&gt; que facilitaram muito o trabalho.&lt;/p&gt;

&lt;p&gt;Através da pasta API do Next, criei um modo de preview para visualizar o post no site antes de publicar.&lt;/p&gt;

&lt;p&gt;Fiz deploy e, claro, vi a página de um post quebrar em produção por causa de um componente mal feito.&lt;/p&gt;

&lt;p&gt;Se quiser, pode deixar uma estrelinha no &lt;a href="https://github.com/aaamenezes/demenezes"&gt;repo do blog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conhecimento para escrever os posts
&lt;/h3&gt;

&lt;p&gt;Posso falar com tranquilidade que pesquiso bastante.&lt;/p&gt;

&lt;p&gt;Tão importante quanto o conhecimento para subir o blog, é aquele que preciso para produzir os conteúdos. &lt;strong&gt;Eu tenho muito receio de explicar algo errado, então me esforço para estudar e testar tudo que escrevo&lt;/strong&gt;. Apesar de saber que não preciso ser especialista para falar de um assunto.&lt;/p&gt;

&lt;p&gt;Além do tema técnico, escrever em um blog me ajuda muito na escrita e comunicação. Esses dois conhecimentos são importantíssimos na nossa área.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conhecimento de SEO
&lt;/h3&gt;

&lt;p&gt;Search Engineering Optimization.&lt;/p&gt;

&lt;p&gt;Isso me acompanha desde quando trabalhava com marketing digital. &lt;strong&gt;SEO são técnicas para você ficar bem colocado nos resultados de ferramentas de busca&lt;/strong&gt;. Você pode aplicar isso para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Seu site ficar bem colocado no Google&lt;/li&gt;
&lt;li&gt;Seu vídeo ficar bem colocado no YouTube&lt;/li&gt;
&lt;li&gt;Seu aplicativo ficar bem colocado na loja de aplicativos&lt;/li&gt;
&lt;li&gt;Entre outros&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E como tenho acesso ao código fonte do blog, aplico técnicas que seriam mais difíceis caso usasse o Wordpress, por exemplo. Claro que ele tem plugins para facilitar esse trabalho, mas a minha ideia é fazer as coisas na mão para aprender.&lt;/p&gt;

&lt;h3&gt;
  
  
  Um "quase patrocínio" para ir a um evento
&lt;/h3&gt;

&lt;p&gt;Outra "quase conquista" que já aconteceu foi receber &lt;strong&gt;patrocínio para ir a um evento&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Eu tenho alguns posts sobre como foram os eventos de tecnologia, como esse sobre a &lt;a href="https://demenezes.dev/posts/codecon-summit-presencial-2023/"&gt;Codecon Summit em 2023&lt;/a&gt;. Isso chamou a atenção de uma pessoa importante da comunidade, e ela me convidou para participar de um evento e registrar ele.&lt;/p&gt;

&lt;p&gt;Infelizmente não aconteceu por questões de agenda e distância do local do evento, mas seria uma experiência incrível.&lt;/p&gt;

&lt;h3&gt;
  
  
  Treino para palestrar
&lt;/h3&gt;

&lt;p&gt;Como pretendo palestrar no futuro, o blog acaba sendo um treino.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q48jQSgk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779845-um-microfone-com-o-fundo-desfocado-onde-se-ve-uma-plateia-e-uma-arquibancada.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q48jQSgk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779845-um-microfone-com-o-fundo-desfocado-onde-se-ve-uma-plateia-e-uma-arquibancada.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="um microfone com o fundo desfocado onde se vê uma platéia e uma arquibancada" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Existem muitas semelhanças entre um post e uma palestra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Escolher um bom tema&lt;/li&gt;
&lt;li&gt;Escrever o conteúdo da palestra, seja o texto na íntegra ou apenas os tópicos&lt;/li&gt;
&lt;li&gt;Fazer escolha de palavras adequadas&lt;/li&gt;
&lt;li&gt;Revisar tudo&lt;/li&gt;
&lt;li&gt;E no fim, ambos são produção de conteúdo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A diferença é que uma palestra exige uma apresentação de slides interessantes e a exposição do conteúdo com a tua própria voz. E essa parte preciso exercitar mais.&lt;/p&gt;




&lt;p&gt;Spoiler: sequências de clichês.&lt;/p&gt;

&lt;p&gt;Mas nem tudo são flores, e para que eu pudesse conquistar essas coisas, houve pedras no caminho.&lt;/p&gt;

&lt;h2&gt;
  
  
  Desafios para produzir conteúdo
&lt;/h2&gt;

&lt;p&gt;Para mim, o grande desafio para produzir conteúdo é o &lt;strong&gt;tempo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TC7szpPg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779870-varios-relogios-de-parede.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TC7szpPg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779870-varios-relogios-de-parede.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="vários relógios de parede" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se você não é herdeiro ou filho(a) de bilionário(a), tem que trabalhar algumas/muitas horas por dia. E no tempo que sobra para você descansar, ainda deve ter energia para produzir conteúdo. Esse tempo extra vem antes do trabalho pela manhã, após o trabalho à noite, fim de semana e feriado.&lt;/p&gt;

&lt;p&gt;É bem difícil decidir entre descansar, ler um livro, ver uma série ou filme, dormir, ou produzir conteúdo. A escolha é muito particular. Você precisa colocar os prós e contras na balança e ver o que pesa mais.&lt;/p&gt;

&lt;p&gt;Quanto maior o esforço para produzir conteúdo de qualidade, mais tempo vai levar, a não ser que contrate pessoas para fazer algumas tarefas. Mas se você ainda não ganha dinheiro com seu conteúdo, dificilmente isso vale a pena.&lt;/p&gt;

&lt;p&gt;Desde o começo do blog, postei conteúdos voltados para a teoria de desenvolvimento web. E isso trouxe outro problema, &lt;strong&gt;eu deixei de lado os projetos pessoais&lt;/strong&gt;, pois não conseguia mantê-los junto com o blog. Mas como já falei, quero mudar isso ano que vem. Talvez até codar os projetos em live.&lt;/p&gt;

&lt;p&gt;Eu sempre fui um pouco apaixonado por números, então eu conto o tempo que levo em cada etapa de um post. Fiz um apanhado desses números e trouxe agora para você.&lt;/p&gt;

&lt;h2&gt;
  
  
  O demenezes.dev em números
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Acessos
&lt;/h3&gt;

&lt;p&gt;O primeiro commit do blog foi em 4 de julho de 2021:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5k6rVzRn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779892-primeiro-commit-do-blog.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5k6rVzRn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1703779892-primeiro-commit-do-blog.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="primeiro commit do blog demenezes.dev" width="531" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No dia 15 de agosto do mesmo ano comprei o domínio demenezes.dev no Google Domínios. Mas por causa de compromissos e uma mentoria que dei nesse ano, o primeiro post só foi ao ar no dia 25 de maio de 2022. Mais de 22 mil pessoas já leram esse post, que foi sobre &lt;a href="https://demenezes.dev/posts/centralizar-em-css/"&gt;como centralizar qualquer coisa em CSS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Outros que despontaram foram:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A diferença entre &lt;a href="https://demenezes.dev/posts/link-botao-button-html/"&gt;links e botões em HTML&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dicas de &lt;a href="https://demenezes.dev/posts/atalhos-vs-code-aumentar-produtividade/"&gt;atalhos customizados no VS Code&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;E uma visão geral sobre o comportamento de &lt;a href="https://demenezes.dev/posts/focus-em-elementos-html-css-javascript/"&gt;focus na web&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;De lá para cá, já foram 37 posts e pelo menos 1 por mês.&lt;/p&gt;

&lt;p&gt;Mas agora sim, meus amigos. Vou falar sobre o ponto que me despertou para escrever sobre isso, o tempo necessário para produzir os conteúdos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Métricas internas
&lt;/h3&gt;

&lt;p&gt;Eu mantenho um controle do tempo que levo para escrever cada uma das 7 etapas do post.&lt;/p&gt;

&lt;p&gt;Veja abaixo um resumo desde quando comecei a contabilizar:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Post&lt;/th&gt;
&lt;th&gt;Planejamento&lt;/th&gt;
&lt;th&gt;Criação&lt;/th&gt;
&lt;th&gt;Imagens&lt;/th&gt;
&lt;th&gt;Revisão&lt;/th&gt;
&lt;th&gt;Título&lt;/th&gt;
&lt;th&gt;Publicação&lt;/th&gt;
&lt;th&gt;Divulgação&lt;/th&gt;
&lt;th&gt;Total&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;imagem-quadrada-redonda-css&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;390&lt;/td&gt;
&lt;td&gt;79&lt;/td&gt;
&lt;td&gt;76&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;10h37min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;codecon-online-2023&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;71&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;4h12min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iife-funcao-autoinvocada&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;337&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;td&gt;8h35min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;front-in-sampa-2023&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;107&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;3h25min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;diferenca-entre-array-htmlcollection-nodelist-domtokenlist-namednodemap&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;106&lt;/td&gt;
&lt;td&gt;12h50min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;como-usar-foreach-javascript-exemplos&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;246&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;76&lt;/td&gt;
&lt;td&gt;7h18min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;codecon-summit-presencial-2023&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;2h10min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;map-javascript-array&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;347&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;71&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;9h49min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;filter-javascript-array&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;236&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;6h54min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find-javascript-array&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;346&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;57&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;72&lt;/td&gt;
&lt;td&gt;8h36min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;every-some-javascript-array&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;442&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;76&lt;/td&gt;
&lt;td&gt;10h28min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reduce-array-javascript&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;288&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;115&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;125&lt;/td&gt;
&lt;td&gt;9h36min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reduce-array-javascript&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;152&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;4h37min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Média&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;274&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;td&gt;7h37min&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Agora vou destacar alguns pontos que achei bem interessantes.&lt;/p&gt;

&lt;p&gt;O tempo médio para produzir um conteúdo é de 7 horas e 37 minutos.&lt;/p&gt;

&lt;p&gt;O post mais demorado foi sobre os &lt;a href="https://demenezes.dev/posts/diferenca-entre-array-htmlcollection-nodelist-domtokenlist-namednodemap/https:/demenezes.dev/posts/diferenca-entre-array-htmlcollection-nodelist-domtokenlist-namednodemap/"&gt;diferentes tipos de array&lt;/a&gt;. E o mais rápido, sobre o evento &lt;a href="https://demenezes.dev/posts/codecon-summit-presencial-2023/https:/demenezes.dev/posts/codecon-summit-presencial-2023/"&gt;Codecon Summit 2023&lt;/a&gt; em Joinville.&lt;/p&gt;

&lt;p&gt;Os posts sobre eventos são mais rápidos de escrever, pois não exigem revisão técnica ou testes, são apenas um relato. Você pode notar isso nos outros sobre o &lt;a href="https://demenezes.dev/posts/front-in-sampa-2023/"&gt;Front in Sampa 2023&lt;/a&gt; e a &lt;a href="https://demenezes.dev/posts/codecon-online-2023/"&gt;Codecon Online 2023&lt;/a&gt;. Outro ponto é que eu chego do evento com o esqueleto do post pronto, pois faço anotações. Mas confesso que é um tipo de conteúdo que não me orgulho muito, quero mudar o formato.&lt;/p&gt;

&lt;p&gt;A etapa de criação do post, como era de se esperar, é a mais demorada, já que é a mais importante.&lt;/p&gt;

&lt;p&gt;E para além dos números, os posts que mais me orgulhei de ter escrito foram:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://demenezes.dev/posts/atributo-loading-lazy/"&gt;Talvez você não deva usar o atributo loading="lazy"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://demenezes.dev/posts/como-fazer-lazyload/"&gt;Como fazer um lazyload compatível com qualquer browser&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Callback
&lt;/h2&gt;

&lt;p&gt;Para produzir o conteúdo aqui do blog, divido o processo em 7 etapas. Planejamento, criação, imagens, revisão, título, publicação e divulgação.&lt;/p&gt;

&lt;p&gt;As ideias surgem de desafios que passei no trabalho, assuntos de estudo e experiências pessoais.&lt;/p&gt;

&lt;p&gt;Percebo que até agora adquiri muito conhecimento técnico com o blog, SEO, além de ser um preparo para quando eu palestrar.&lt;/p&gt;

&lt;p&gt;Os principais desafios para produzir conteúdo foram:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O tempo necessário para escrever tudo com a qualidade que eu desejo&lt;/li&gt;
&lt;li&gt;E ter deixado outros projetos pessoais de lado&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O blog começou a mais ou menos 2 anos e meio, já escrevi 37 posts, contando com esse. Levo em média 7 hora e 37 minutos para escrever cada um deles.&lt;/p&gt;

&lt;p&gt;Apesar do meu interesse em mostrar os dados do último ano, aproveitei e fiz esse levantamento geral.&lt;/p&gt;

&lt;p&gt;Muito obrigado a você que acompanhou o blog até aqui. Deixe um comentário com a sua opinião sobre o blog inclusive com sugestões, estou em época de mudanças.&lt;/p&gt;

&lt;p&gt;Um feliz 2024 para você 😬&lt;/p&gt;

</description>
      <category>producaodeconteudo</category>
      <category>blog</category>
      <category>tecnologia</category>
      <category>githubbrasil</category>
    </item>
    <item>
      <title>Projetos pessoais: 5 dicas para você decidir se deve melhorar ou começar um novo</title>
      <dc:creator>deMenezes</dc:creator>
      <pubDate>Wed, 13 Dec 2023 00:22:28 +0000</pubDate>
      <link>https://dev.to/demenezes/projetos-pessoais-5-dicas-para-voce-decidir-se-deve-melhorar-ou-comecar-um-novo-2l6f</link>
      <guid>https://dev.to/demenezes/projetos-pessoais-5-dicas-para-voce-decidir-se-deve-melhorar-ou-comecar-um-novo-2l6f</guid>
      <description>&lt;h2&gt;
  
  
  Você não sabe se melhora o seu projeto pessoal ou começa um novo? Clique e veja essas 5 dicas para analisar com carinho e decidir.
&lt;/h2&gt;

&lt;p&gt;Já ficou na dúvida entre permanecer em um projeto pessoal ou criar o próximo?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qZgY8miA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222474-um-homem-em-duvida-em-frente-a-uma-maquina-de-doces.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qZgY8miA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222474-um-homem-em-duvida-em-frente-a-uma-maquina-de-doces.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="um homem em dúvida em frente a uma máquina de doces" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eu já, várias vezes. Essa dúvida é constante na minha vida.&lt;/p&gt;

&lt;p&gt;Tanto os projetos que tenho no meu Github, quanto os posts do blog, sempre penso se aprimoro ele, ou passo para o próximo. Além de não saber qual decisão tomar, eu não sabia nem no que pensar para tomar essa decisão.&lt;/p&gt;

&lt;p&gt;Após criar alguns projetos na vida, consegui listar pontos a considerar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aprendizado: o quanto você já aprendeu com esse projeto? E quanto ainda pode aprender?
&lt;/h2&gt;

&lt;p&gt;O quanto tu pode aprender com o projeto atual?&lt;/p&gt;

&lt;p&gt;No começo tudo é uma maravilha. Desbrava novos desafios, aplica coisas novas, resolve problemas, vê recursos novos nascerem, melhora a estrutura do software, resolve bugs... Mas sem perceber, de uma hora para outra você está apenas aplicando o que já sabe, sem aprender nada novo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u-Kkfs30--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222498-varias-roupas-iguais-em-uma-cabide-simbolizando-monotonia.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u-Kkfs30--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222498-varias-roupas-iguais-em-uma-cabide-simbolizando-monotonia.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="várias roupas iguais em uma cabide simbolizando monotonia" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esse é um dos primeiros sinais que me fazem pensar em mudar de projeto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que você já aprendeu com o projeto atual? O que você ainda pode aprender?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Há muitos anos, criei um projeto que gerava os números da megasena naquele estilo de bolinhas:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EguWbeOG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222520-tela-com-6-numeros-sorteados-da-megasena-14-26-27-36-49-53.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EguWbeOG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222520-tela-com-6-numeros-sorteados-da-megasena-14-26-27-36-49-53.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="tela com 6 números sorteados da megasena 14, 26, 27, 36, 49, 53" width="416" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O sistema gera um número entre 1 e 60. Entre o 10 e o 60 as bolinhas ficavam perfeitas, mas entre 1 e 9 (com apenas 1 dígito) não tanto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3m-eFlUV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222568-tela-com-6-numeros-sorteados-da-megasena-mas-os-numeros-3-5-e-9-possuem-apenas-um-digito.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3m-eFlUV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222568-tela-com-6-numeros-sorteados-da-megasena-mas-os-numeros-3-5-e-9-possuem-apenas-um-digito.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="tela com 6 números sorteados da megasena, mas os números 3, 5 e 9 possuem apenas um dígito.png" width="425" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se o número fosse entre 1 e 9, eu precisava saber como acrescentar um zero antes dele. Inicialmente criei um &lt;code&gt;if&lt;/code&gt; que verificava quantos dígitos tinha o número e acrescentava o zero ou não:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numeroGerado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getNumero&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numeroGerado&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`0&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;numeroGerado&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;numeroGerado&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mais tarde descobri que poderia fazer a mesma coisa com 1 linha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`0&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;getNumero&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E com isso cheguei no resultado que queria:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q8H5nI5---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222586-tela-com-6-numeros-sorteados-da-megasena-agora-os-numeros-3-5-e-9-possuem-um-0-antes-1.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q8H5nI5---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222586-tela-com-6-numeros-sorteados-da-megasena-agora-os-numeros-3-5-e-9-possuem-um-0-antes-1.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="tela com 6 números sorteados da megasena, agora os números 3, 5 e 9 possuem um 0 antes" width="426" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois disso, percebi que estava na hora de deixar esse projeto para trás.&lt;/p&gt;

&lt;p&gt;Querer aprender e gostar de estudar é uma característica muito importante na nossa área. Se eu estivesse em um podcast (aqueles com mesa e live) e me perguntassem uma característica importante para trabalhar com tecnologia, eu responderia &lt;strong&gt;curiosidade em saber como as coisas funcionam&lt;/strong&gt; (e em seguida rezaria para isso não virar corte de Tiktok/Reels).&lt;/p&gt;

&lt;p&gt;Essa curiosidade aparece tanto no momento em que você desmonta um carrinho de controle remoto para entender seu funcionamento, quanto quando você faz engenharia reversa daquela lib famosa que manipula e formulários em React.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aXhsQsyK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222612-carrinho-de-controle-remoto-desmontado.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aXhsQsyK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222612-carrinho-de-controle-remoto-desmontado.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="carrinho de controle remoto desmontado" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Existem mais aplicativos de listas de tarefas do que grãos de areia na praia. Mas o que a pessoa dev faz quando começa a estudar programação? Cria o seu próprio aplicativo de lista de tarefas!&lt;/p&gt;

&lt;p&gt;Tem muita crítica em cima desses projetos que apenas copiam a interface do Spotify, a interface da Netflix, mais um app de tarefas, etc... eu particularmente vejo muito valor nisso, pois existem muitas possibilidades de aprendizado. Desde que você não copie o código do bootcamp da moda e que o repositório não fique igual ao de outras 5 mil pessoas.&lt;/p&gt;

&lt;p&gt;Outro questionamento: esse projeto é importante para sua carreira, currículo ou entrevista? Ter um projeto com essa stack, nível de dificuldade ou segmento vai te colocar uma posição melhor no mercado?&lt;/p&gt;

&lt;p&gt;Pense nisso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comunidade: outras pessoas contribuem e usam esse projeto?
&lt;/h2&gt;

&lt;p&gt;Esse fator pode não acontecer no começo da sua carreira. Mas com o tempo sim.&lt;/p&gt;

&lt;p&gt;Se o projeto é algo individual, é um pouco mais fácil tomar essa decisão. Porém com outras pessoas envolvidas, complica um pouco.&lt;/p&gt;

&lt;p&gt;Quando você começa um projeto e cria o repositório numa plataforma como o Github, existem diversas ferramentas que facilitam a construção em grupo, sugestões de alteração, resolução de bugs, revisão de código, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LXc7fza2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222636-meme-do-obama-colocando-uma-medalha-nele-mesmo.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LXc7fza2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222636-meme-do-obama-colocando-uma-medalha-nele-mesmo.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="meme do obama colocando uma medalha nele mesmo" width="800" height="586"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conforme seu projeto cresce, e outras pessoas colaboram, fica um pouco mais difícil abandoná-lo. Pois nesse momento você se torna o responsável por tornar aquilo um "caos organizado". Definir padrões de commit, PR, releases, e muitas outras responsabilidades.&lt;/p&gt;

&lt;p&gt;Porém, algumas das pessoas que contribuem, podem querer ajudar a organizar. E esse é um grande momento para eleger moderadores, criar um &lt;code&gt;README.md&lt;/code&gt; bem escrito, entre outras regras que fazem a comunidade andar com as próprias pernas.&lt;/p&gt;

&lt;p&gt;Pense nisso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack: você quer se aprimorar nas tecnologias desse projeto?
&lt;/h2&gt;

&lt;p&gt;Certa vez fiz um teste técnico para um entrevista.&lt;/p&gt;

&lt;p&gt;Eu tinha 4 horas para finalizar 4 desafios. Levei 3 horas e meia para fazer apenas um deles, um conversor de decimal para binário. Tudo bem.&lt;/p&gt;

&lt;p&gt;Entre as linguagens permitidas, eu conhecia mais Python, pois estava aprendendo na faculdade.&lt;/p&gt;

&lt;p&gt;Após terminar o desafio, eu queria colocar o projeto no meu Github. &lt;strong&gt;O ponto é, como meu foco sempre foi o ambiente web e front-end, resolvi &lt;a href="https://github.com/aaamenezes/Converter-decimal-para-binario-e-vice-e-versa"&gt;converter tudo para Javascript&lt;/a&gt;&lt;/strong&gt;. E foi assim que eu fiz.&lt;/p&gt;

&lt;p&gt;Apesar de não ter passado na vaga, aprendi bastante coisa sobre:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Javascript&lt;/li&gt;
&lt;li&gt;Manipulação de DOM&lt;/li&gt;
&lt;li&gt;E claro, binário&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cMy43JKx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222660-tela-do-sistema-que-conversa-binario-em-decimal-e-vice-versa.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cMy43JKx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://demenezes.dev/_next/image/%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1702222660-tela-do-sistema-que-conversa-binario-em-decimal-e-vice-versa.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="tela do sistema que conversa binário em decimal e vice versa" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E esse é outro fator para levar em consideração quando você está a fim de abandonar um projeto. É a stack que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Você quer se especializar?&lt;/li&gt;
&lt;li&gt;Você precisa usar para um teste técnico?&lt;/li&gt;
&lt;li&gt;Está com oportunidades no mercado?&lt;/li&gt;
&lt;li&gt;Você gosta?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pense nisso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Desejo: você tem vontade de continuar com esse projeto?
&lt;/h2&gt;

&lt;p&gt;Ei, você leu o título? Então responde...&lt;/p&gt;

&lt;p&gt;Você tem vontade de continuar com esse projeto?&lt;/p&gt;

&lt;p&gt;Não estou dizendo que vontade é o único fator para isso, até porque na vida você precisa fazer muitas coisas desgostosas, como acordar cedo segunda-feira. Mas esse é sim mais um fator para tomar essa decisão.&lt;/p&gt;

&lt;p&gt;Se a vontade for praticamente zero, os outros fatores têm que ser muito fortes para manter você ativo no projeto.&lt;/p&gt;

&lt;p&gt;Eu tenho uma certa dificuldade em largar as coisas pela metade, mesmo quando elas não me agradam. Como filmes, séries e jogos. Mas acredito que isso é um hábito bem ruim, o certo seria desapegar mesmo e partir para o próximo.&lt;/p&gt;

&lt;p&gt;Se você também tem esse hábito, tente perceber se não é isso que mantém você preso a projetos desinteressantes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outro ponto é diferenciar a vontade de executar o projeto tarefa a tarefa, e a vontade de atingir o resultado do projeto.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Por exemplo, algumas tarefas aqui blog são meio chatas, como escolher título, descrição e uma boa imagem de capa. Porém sei que no geral eu ganho muito ao compartilhar conteúdo.&lt;/p&gt;

&lt;p&gt;Você pode não estar tão satisfeito com um projeto, mas ao finalizá-lo, o que ele te trará de bom? Por outro lado, alguns projetos valem mais apenas quando as tarefas são legais do que o resultado em si. Tudo varia, tudo muda, tudo é fase.&lt;/p&gt;

&lt;p&gt;Pense nisso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Retomar o projeto: se eu abandonar agora, como será voltar nele no futuro?
&lt;/h2&gt;

&lt;p&gt;Existe chance de você querer voltar nesse projeto?&lt;/p&gt;

&lt;p&gt;Vou contar sobre coisas que já pensei aqui mesmo no blog. Além de postar por aqui, divulgo os conteúdos também no &lt;a href="https://medium.com/@demenezes"&gt;Medium&lt;/a&gt; e &lt;a href="https://dev.to/demenezes"&gt;Dev.to&lt;/a&gt;. Já pensei várias vezes em publicar apenas lá, em vez de ter um site pessoal com domínio próprio. É muito mais fácil, pois terei menos preocupações com:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design da página, layout&lt;/li&gt;
&lt;li&gt;Problema de deploy&lt;/li&gt;
&lt;li&gt;Stack&lt;/li&gt;
&lt;li&gt;Bugs que podem quebrar uma página&lt;/li&gt;
&lt;li&gt;A hospedagem ou o CMS não terem mais planos gratuitos&lt;/li&gt;
&lt;li&gt;Etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Porém o blog pessoal me dá várias possibilidades que, apesar do trabalho, ajudam muito no aprendizado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eu aprendi como subir um blog quase do zero&lt;/li&gt;
&lt;li&gt;Aprendi sobre rotas&lt;/li&gt;
&lt;li&gt;Aprendi como montar uma paginação&lt;/li&gt;
&lt;li&gt;Fiz uma busca longa e repleta de referências para montar todo o layout do site&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Além de eu poder usar o blog como um laboratório pessoal. Por exemplo, no futuro quero migrar o projeto de Javascript puro para Typescript , e trocar o Styled Components por outra ferramenta de estilização. Por enquanto é isso.&lt;/p&gt;

&lt;p&gt;E se eu realmente cansar de tudo isso e quiser apenas escrever sem me preocupar em desenvolver um blog? É só parar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mas e se eu quiser voltar a ter o blog no futuro?&lt;/strong&gt; Agora sim o ponto principal.&lt;/p&gt;

&lt;p&gt;O quão difícil seria para retomar? Eu precisaria repostar aqui o conteúdo retroativo que só postei em outras plataformas? O Google iria penalizar o meu domínio (demenezes.dev) por ficar tanto tempo sem atualizar o site? Eu perderia pontos de SEO? E se no futuro eu quisesse abandonar novamente? E retomar novamente?&lt;/p&gt;

&lt;p&gt;Pense nisso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Callback
&lt;/h2&gt;

&lt;p&gt;Para você decidir se deve seguir em um projeto pessoal ou partir para o próximo pense nesses pontos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aprendizado&lt;/li&gt;
&lt;li&gt;Comunidade&lt;/li&gt;
&lt;li&gt;Stack&lt;/li&gt;
&lt;li&gt;Desejo&lt;/li&gt;
&lt;li&gt;Futuro.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O primeiro ponto é sobre o aprendizado. Perceba se você aprende com ele ou apenas executa coisas que já sabe.&lt;/p&gt;

&lt;p&gt;Olhe também para a comunidade, quantidade de pessoas que contribuem ou usam o projeto. Se puder eleger pessoas para administrar e moderar o repositório, é uma ótima chance de partir.&lt;/p&gt;

&lt;p&gt;Veja se faz sentido investir nesse projeto caso ele use uma stack que não te atrai ou não te abre portas no mercado.&lt;/p&gt;

&lt;p&gt;Olhe também para seus sentimentos (profundo). O quanto você tem vontade de continuar nele? Aqui ignore os motivos racionais e grandes justificativas, olhe apenas para o que você realmente sente.&lt;/p&gt;

&lt;p&gt;Por fim, o que aconteceria se, após desistir, você quisesse retomar esse projeto no futuro? Seria fácil voltar?&lt;/p&gt;

&lt;p&gt;Pense ni...&lt;/p&gt;

&lt;p&gt;Agora coloque essas dicas num liquidificador, adicione seus próprios pontos e tome sua decisão.&lt;/p&gt;

&lt;p&gt;Não esquece de comentar aqui embaixo quais são outros pontos importantes para essas situações.&lt;/p&gt;

&lt;p&gt;Apesar de parece que esse post é uma lista de dicas minhas para você, eu também escrevo isso para o André do futuro. É bem provável que eu passe por essa dúvida, assim como já passei antes.&lt;/p&gt;




&lt;p&gt;Se achou o conteúdo interessante, e gostaria de dizer um &lt;strong&gt;obrigado&lt;/strong&gt;, compartilha com algum amigo, ou nas redes sociais 😀&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

</description>
      <category>projetospessoais</category>
      <category>carreira</category>
      <category>career</category>
      <category>githubbrasil</category>
    </item>
    <item>
      <title>Quem tem medo do reduce? Entenda esse método agora ou seu dinheiro de volta</title>
      <dc:creator>deMenezes</dc:creator>
      <pubDate>Wed, 29 Nov 2023 00:36:30 +0000</pubDate>
      <link>https://dev.to/demenezes/quem-tem-medo-do-reduce-entenda-esse-metodo-agora-ou-seu-dinheiro-de-volta-3e3f</link>
      <guid>https://dev.to/demenezes/quem-tem-medo-do-reduce-entenda-esse-metodo-agora-ou-seu-dinheiro-de-volta-3e3f</guid>
      <description>&lt;h2&gt;
  
  
  Veja os diferentes tipos de operações que o reduce pode aplicar em uma array. Entenda esse método agora, ou devolvo seu dinheiro.
&lt;/h2&gt;

&lt;p&gt;Reduce em inglês é &lt;strong&gt;reduzir&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O motivo disso é que a principal funcionalidade do reduce é &lt;strong&gt;reduzir uma array a apenas um valor&lt;/strong&gt;. Veja um exemplo onde o reduce soma todos os números de uma array e retorna um número:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1700832228-array-com-os-numeros-76-23-89-e-54-sendo-reduzida-ao-numero-242-atraves-de-uma-soma.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1700832228-array-com-os-numeros-76-23-89-e-54-sendo-reduzida-ao-numero-242-atraves-de-uma-soma.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="array com os números 76, 23, 89 e 54 sendo reduzida ao número 242 através de uma soma" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acumulado&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 242&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O que está aconteceu aqui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Na primeira iteração,  &lt;code&gt;acumulado&lt;/code&gt; é o primeiro da array, e &lt;code&gt;atual&lt;/code&gt; o segundo&lt;/li&gt;
&lt;li&gt;Nas próximas, &lt;code&gt;acumulado&lt;/code&gt; é o retorno das iterações anteriores, e o&lt;code&gt;atual&lt;/code&gt; é o próximo item da array&lt;/li&gt;
&lt;li&gt;Apesar de a array ter 4 itens, houve apenas 3 iterações (vou mostrar como corrigir isso)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O valor que o reduce retorna não precisa ser apenas uma string ou número, pode ser um objeto e inclusive outra array.&lt;/p&gt;

&lt;p&gt;Imagino que por esse motivo esse seja o método de array mais complicado de entender, não vou mentir. Mas estou aqui para tentar explicar tudo da melhor forma. Ao longo do post vou dar vários exemplos de uso do reduce, do mais fácil para o menos fácil, para ajudar na explicação.&lt;/p&gt;

&lt;p&gt;O parâmetro do reduce é uma função callback. Porém existe um segundo parâmetro opcional (mas altamente recomendado) que muda um pouco a lógica do jogo.&lt;/p&gt;

&lt;h2&gt;
  
  
  O valor inicial do reduce
&lt;/h2&gt;

&lt;p&gt;Você pode definir um ponto de partida para o reduce.&lt;/p&gt;

&lt;p&gt;O segundo parâmetro, que é opcional e não usei antes, é o &lt;strong&gt;valor inicial&lt;/strong&gt;. Vou recriar o primeiro exemplo com um valor inicial de 8:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acumulado&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 250&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Coloquei cada parâmetro em uma variável para facilitar a leitura. Como o reduce inicia em 8, o resultado que antes era 242, agora é 250.&lt;/p&gt;

&lt;p&gt;Mas agora, o valor das variáveis &lt;code&gt;acumulado&lt;/code&gt; e &lt;code&gt;atual&lt;/code&gt; muda durante as iterações:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agora, a quantidade de iterações corresponde ao número de itens da array, 4. Então por segurança, sempre defina o valor inicial&lt;/li&gt;
&lt;li&gt;Na primeira iteração, &lt;code&gt;acumulado&lt;/code&gt; é o valor que defini como inicial (8); e &lt;code&gt;atual&lt;/code&gt; representa o primeiro item da array, 76&lt;/li&gt;
&lt;li&gt;Nas próximas, &lt;code&gt;acumulado&lt;/code&gt; é o resultado das iterações anteriores, e o &lt;code&gt;atual&lt;/code&gt; é um item da array&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Colocar um valor inicial é como colocar um item no começo da array antes de começar o reduce&lt;/strong&gt;. Ele facilita o entendimento, porque na primeira iteração não existe &lt;strong&gt;resultado anterior&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No código abaixo, eu adicionei o 8 no começo da array e removi ele do valor inicial do Reduce. O resultado é o mesmo, mas não recomendo fazer isso. O valor inicial esclarece melhor o que acontece no código.&lt;/p&gt;

&lt;p&gt;Faça por sua conta e risco:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Adicionei o 8 no começo da array&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acumulado&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Sem initialValue&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 250&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aos poucos, fica claro que o valor de retorno da função callback é muito importante. Vou dar um foco nela agora.&lt;/p&gt;

&lt;h2&gt;
  
  
  O retorno da função callback do reduce
&lt;/h2&gt;

&lt;p&gt;Você pode retornar o que quiser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O valor que você retornar em cada iteração será o valor do &lt;code&gt;acumulado&lt;/code&gt; na próxima&lt;/strong&gt;. Esse é uma das grandes vantagens do reduce, você pode fazer operações com mais de um item da array.&lt;/p&gt;

&lt;p&gt;Existe apenas uma exceção a isso, que é a última iteração. O retorno dela é o resultado final do método reduce:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1700832320-tabela-mostrando-que-o-retorno-da-funcao-callback-de-uma-iteracao-define-o-valor-do-parametro-acumulado-na-proxima.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1700832320-tabela-mostrando-que-o-retorno-da-funcao-callback-de-uma-iteracao-define-o-valor-do-parametro-acumulado-na-proxima.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="tabela mostrando que o retorno da função callback de uma iteração define o valor do parâmetro acumulado na próxima" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Veja isso com um exemplo. Vou usar a array abaixo para fazer o reduce:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1a2b3c4d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Camiseta Básica&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Branca&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5e6f7g8h&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Calça Jeans&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Azul&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;9i0j1k2l&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bolsa de Couro&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Marrom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Único&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3m4n5o6p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tênis Esportivo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Preto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;42&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7q8r9s0t&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vestido Floral&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Rosa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;350&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa array representa os produtos de um carrinho de compras. Como faço para chegar no valor total dos produtos ao final do carrinho?&lt;/p&gt;

&lt;p&gt;Para começar, crio a função callback ainda vazia, e o valor inicial como zero:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;produtoAtual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora preciso somar o valor de todos os produtos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;acumulado&lt;/code&gt; possui o valor inicial na primeira iteração, e o resultado anterior nas próximas&lt;/li&gt;
&lt;li&gt;E &lt;code&gt;produtoAtual&lt;/code&gt; será, claro, o produto atual&lt;/li&gt;
&lt;li&gt;Então basta eu somar o &lt;code&gt;acumulado&lt;/code&gt; com o preço do produto atual
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;produtoAtual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acumulado&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;produtoAtual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 2150&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim verá que o preço total desse carrinho é R$ 2150.&lt;/p&gt;

&lt;p&gt;Como falei no começo, o reduce talvez seja um dos métodos mais chatinhos de entender. É difícil decidir o momento de usá-lo, já que é complexo e tem múltiplas possibilidades de uso. Uma dessas complexidades é que o reduce pode funcionar no lugar de outros métodos.&lt;/p&gt;

&lt;h2&gt;
  
  
  O reduce pode substituir outros métodos de array
&lt;/h2&gt;

&lt;p&gt;Olha que flexível.&lt;/p&gt;

&lt;p&gt;Os próximos exemplos servem apenas para você compreender as possibilidades do reduce. Mas em todos eles, você verá que usar o outro método é muito mais simples.&lt;/p&gt;

&lt;p&gt;Então muito juízo nos usos e:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Guarde o que foi bom&lt;br&gt;E jogue fora o que restou&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"NX Zero"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Reduce ou map?
&lt;/h3&gt;

&lt;p&gt;O sol nasce, o sapo sapeia, e o map mapeia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O map é um método Javascript que cria uma array a partir de outra, sem alterar a original.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para mais detalhes, veja esse &lt;a href="https://demenezes.dev/posts/map-javascript-array/" rel="noopener noreferrer"&gt;artigo sobre map&lt;/a&gt; que escrevi no blog.&lt;/p&gt;

&lt;p&gt;Com o map, vou pegar uma array com personagens de Dragon Ball, e colocar o nome deles em caixa alta. Mas apenas dos personagens da raça &lt;code&gt;terráqueo&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Goku&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;saiyajin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;     &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cell&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;android&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;      &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kuririn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bulma&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vegeta&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;saiyajin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;     &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mestre Kame&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kami-Sama&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;namekuseijin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;  
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/*
  [
    { "name": "Goku",        "race": "saiyajin"     },
    { "name": "Cell",        "race": "android"      },
    { "name": "KURIRIN",     "race": "terráqueo"    },
    { "name": "BULMA",       "race": "terráqueo"    },
    { "name": "Vegeta",      "race": "saiyajin"     },
    { "name": "MESTRE KAME", "race": "terráqueo"    },
    { "name": "Kami-Sama",   "race": "namekuseijin" }
  ]
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eu apenas verifico se a raça do personagem é &lt;code&gt;terráqueo&lt;/code&gt; e faço a operação &lt;code&gt;character.name.toUpperCase()&lt;/code&gt;. Caso contrário, retorno os dados originais.&lt;/p&gt;

&lt;p&gt;É possível fazer o mesmo com reduce:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado será exatamente o mesmo. Mas quais as diferenças?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primeiro, como o resultado será uma array, o &lt;code&gt;initialValue&lt;/code&gt; é uma array vazia&lt;/li&gt;
&lt;li&gt;No começo da função callback, eu faço a mesma verificação de antes &lt;code&gt;atual.race === 'terráqueo'&lt;/code&gt;. Mas agora em vez de retornar isso, eu faço um &lt;code&gt;.push()&lt;/code&gt; para dentro da array com os resultados&lt;/li&gt;
&lt;li&gt;Por fim, retorno o &lt;code&gt;acumulado&lt;/code&gt; para que a próxima iteração tenha esse valor para continuar incrementando&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como você pode ver, o map é muito mais simples. Sem contar que é possível aplicar um arrow function e early return para deixar mais simples ainda.&lt;/p&gt;

&lt;p&gt;Assim como é possível mapear uma array com o reduce, também é possível filtrar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reduce ou filter?
&lt;/h3&gt;

&lt;p&gt;O filter é realmente um filtro, tipo o filtro de café.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ele filtra uma array e retorna uma lista apenas com os itens que atendem aos requisitos que você definiu.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Veja mais detalhes nesse artigo de como &lt;a href="https://demenezes.dev/posts/filter-javascript-array/" rel="noopener noreferrer"&gt;simplificar sua lógica com arrays com o método filter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Por exemplo, se você tiver uma array com dados de frutas, é possível filtrar e ficar apenas com a vermelhas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fruits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Maçã&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vermelha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Manga&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Amarela&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Banana&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Amarela&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Laranja&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Laranja&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Uva&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Roxa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;     &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pera&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Amarela&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Morango&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vermelha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Abacaxi&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Amarela&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kiwi&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Verde&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cereja&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vermelha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vermelha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/*
[
  { "name": "Maçã",    "color": "Vermelha" },
  { "name": "Morango", "color": "Vermelha" },
  { "name": "Cereja",  "color": "Vermelha" }
]
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como previsto, o reduce pode fazer o mesmo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vermelha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como o reduce faz isso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Novamente existe o valor inicial com uma array vazia. Mesmo que o resultado contenha zero ou 1 item, a lógica é sempre começar com uma array esse tipo de desafio&lt;/li&gt;
&lt;li&gt;A função callback verifica se a fruta é da cor vermelha&lt;ul&gt;
&lt;li&gt;Se sim, insere ela no &lt;code&gt;acumulado&lt;/code&gt; e retorna&lt;/li&gt;
&lt;li&gt;Caso contrário, retorna o &lt;code&gt;acumulado&lt;/code&gt; sem adicionar nada, isso acontece com as outras cores de frutas. Por isso a saída final tem menos itens que a array original&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Os métodos map e filter sempre retornam uma array, então é fácil imaginar que o valor inicial é uma array vazia. Mas agora os exemplos são com métodos que não, necessariamente, retornam um array.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reduce ou find?
&lt;/h3&gt;

&lt;p&gt;Esse método é o &lt;a href="https://demenezes.dev/posts/find-javascript-array/" rel="noopener noreferrer"&gt;"CTRL + F" do Javascript&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O find encontra o primeiro item dentro de uma array que atende a um ou mais critérios e retorna esse item.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Veja como ele faz isso, vou usar a mesma array de produtos de antes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1a2b3c4d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Camiseta Básica&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Branca&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5e6f7g8h&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Calça Jeans&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Azul&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;9i0j1k2l&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bolsa de Couro&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Marrom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Único&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3m4n5o6p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tênis Esportivo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Preto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;42&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7q8r9s0t&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vestido Floral&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Rosa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;350&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3m4n5o6p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/*
  {
    id: '3m4n5o6p',
    name: 'Tênis Esportivo',
    color: 'Preto',
    size: '42',
    weight: 300,
    availability: true
  }
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ele encontra o primeiro que possui a propriedade &lt;code&gt;id&lt;/code&gt; igual a &lt;code&gt;3m4n5o6p&lt;/code&gt;. Após isso, ele finaliza a execução.&lt;/p&gt;

&lt;p&gt;E como o reduce faria isso?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3m4n5o6p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Algumas decisões que tomei:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O valor inicial é &lt;code&gt;undefined&lt;/code&gt;, isso porque se o produto não for encontrado, esse será o valor final&lt;/li&gt;
&lt;li&gt;Mudei o nome do parâmetro de &lt;code&gt;acumulado&lt;/code&gt; para &lt;code&gt;resultado&lt;/code&gt;, pois ela acumula dados a cada iteração&lt;/li&gt;
&lt;li&gt;Dentro da função callback, se o produto &lt;code&gt;atual&lt;/code&gt; tiver o ID desejado, retorno ele, caso contrário retorno o &lt;code&gt;resultado&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A execução só cairá no &lt;code&gt;if&lt;/code&gt; uma vez (com o produto certo) e no &lt;code&gt;else&lt;/code&gt; em todas as outras &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Veja mais uma versatilidade do reduce, retornar apenas um dos itens da array, e não uma array de itens.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reduce ou every?
&lt;/h3&gt;

&lt;p&gt;Every em inglês: todo ou toda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O every responde (com &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt;) se todos os itens de uma array atendem aos requisitos&lt;/strong&gt;. Confira aqui no &lt;a href="https://demenezes.dev/posts/every-some-javascript-array/" rel="noopener noreferrer"&gt;artigo completo sobre every&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Vou usar uma array com dados de cidades para mostrar do que o every é capaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;São Paulo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SP&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1521&lt;/span&gt;   &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Rio de Janeiro&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;RJ&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1200&lt;/span&gt;   &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Brasília&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DF&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5800&lt;/span&gt;   &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Salvador&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;706&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fortaleza&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;314&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Belo Horizonte&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MG&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;331&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Manaus&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;         &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AM&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;11400&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Curitiba&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PR&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;435&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Recife&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;         &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;218&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Porto Alegre&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;RS&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;496&lt;/span&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;area&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse exemplo mostra como verificar se todas as cidades de uma array possuem área maior que 300 mil km².&lt;/p&gt;

&lt;p&gt;A resposta final é &lt;code&gt;false&lt;/code&gt;. Mas se você trocar o &lt;code&gt;if (cidade.area &amp;gt; 300)&lt;/code&gt; para &lt;code&gt;if (cidade.area &amp;gt; 200)&lt;/code&gt; verá que o resultado muda para &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Nesse momento o reduce diz "essa é muito fácil, manda outra mais difícil":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;areaMaiorQue300&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;area&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acumulado&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;areaMaiorQue300&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A estrutura aqui ficou um pouco diferente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O valor inicial é &lt;code&gt;true&lt;/code&gt;, ou seja, eu parto do princípio que todas as cidades tem área acima de 300 mil km². Pois basta que uma cidade não tenha para o resultado final ser &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Crio a &lt;code&gt;const areaMaiorQue300&lt;/code&gt; que possui um valor booleano&lt;/li&gt;
&lt;li&gt;É na linha do &lt;code&gt;return&lt;/code&gt; que está o segredo. Eu retorno uma operação lógica que tem dois valores booleanos separados por um &lt;code&gt;&amp;amp;amp;&amp;amp;amp;&lt;/code&gt;. Se ambos os valores forem &lt;code&gt;true&lt;/code&gt;, a resposta é &lt;code&gt;true&lt;/code&gt;. Basta que um dos valores seja &lt;code&gt;false&lt;/code&gt; para mudar o resultado até a última iteração&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se o reduce ficou mais simples que o outro método? Difícil responder.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reduce ou some?
&lt;/h3&gt;

&lt;p&gt;Some em inglês: algum ou alguma.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O &lt;a href="https://demenezes.dev/posts/every-some-javascript-array/" rel="noopener noreferrer"&gt;some&lt;/a&gt; afirma se pelo menos um item de uma array atende aos requisitos&lt;/strong&gt;. Muito parecido com o every.&lt;/p&gt;

&lt;p&gt;Vou pegar como exemplo a mesma array de cidades do every. O some pode responder perguntas como "entre as 10 maiores cidades do Brasil, existe alguma da Bahia (BA)?":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;estado&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A versão "reduce" do some, é bem parecida com a do every:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cidadeDaBahia&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;estado&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acumulado&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;cidadeDaBahia&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora algumas coisas se invertem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agora o valor inicial é &lt;code&gt;false&lt;/code&gt;, pois basta que uma cidade atenda ao requisito para o resultado final ser &lt;code&gt;true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Na função callback, a &lt;code&gt;const cidadeDaBahia&lt;/code&gt; também recebe um valor booleano que corresponde a essa afirmação&lt;/li&gt;
&lt;li&gt;O return também é bem parecido. A diferença é que a operação lógica vem com &lt;code&gt;||&lt;/code&gt; e não &lt;code&gt;&amp;amp;amp;&amp;amp;amp;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas foram as comparações do reduce com outros métodos comuns de array em Javascript.&lt;/p&gt;

&lt;p&gt;Até agora, as funções callback dos exemplos receberam apenas dois parâmetros, &lt;code&gt;acumulado&lt;/code&gt; e &lt;code&gt;atual&lt;/code&gt;. Mas existem 4.&lt;/p&gt;

&lt;h2&gt;
  
  
  Os 4 parâmetros da função callback
&lt;/h2&gt;

&lt;p&gt;Os outros métodos que mencionei podem receber até 3 parâmetros.&lt;/p&gt;

&lt;p&gt;Já no reduce, esse número pode chegar a 4. Assim como mostrei nos exemplos, você pode chamá-los como quiser, mas sempre adapte a cada cenário.&lt;/p&gt;

&lt;p&gt;Veja agora os parâmetros.&lt;/p&gt;

&lt;h3&gt;
  
  
  O parâmetro "acumulado"
&lt;/h3&gt;

&lt;p&gt;Esse parâmetro depende do valor inicial apenas na primeira iteração.&lt;/p&gt;

&lt;p&gt;Sem o valor inicial, &lt;code&gt;acumulado&lt;/code&gt; é o &lt;strong&gt;primeiro&lt;/strong&gt; item da array. No exemplo abaixo, o valor desse parâmetro é &lt;code&gt;76&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o valor inicial, &lt;code&gt;acumulado&lt;/code&gt; é esse valor. No exemplo abaixo, o valor é &lt;code&gt;8&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Da segunda iteração em diante, ele sempre será o retorno da iteração anterior.&lt;/p&gt;

&lt;h3&gt;
  
  
  O parâmetro "atual"
&lt;/h3&gt;

&lt;p&gt;Esse parâmetro também depende do valor inicial.&lt;/p&gt;

&lt;p&gt;Sem esse valor, &lt;code&gt;atual&lt;/code&gt; é o &lt;strong&gt;segundo&lt;/strong&gt; item da array, &lt;code&gt;23&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o valor inicial, &lt;code&gt;atual&lt;/code&gt; passa a ser o &lt;strong&gt;primeiro&lt;/strong&gt; item da array, &lt;code&gt;76&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Da segunda iteração em diante, ele sempre será o próximo item da array.&lt;/p&gt;

&lt;h3&gt;
  
  
  O parâmetro "index"
&lt;/h3&gt;

&lt;p&gt;Essa é fácil: ele é um número.&lt;/p&gt;

&lt;p&gt;Na primeira iteração, é 0...&lt;/p&gt;

&lt;p&gt;Na segunda iteração, é 1...&lt;/p&gt;

&lt;p&gt;Na terceira iteração, é 2...&lt;/p&gt;

&lt;p&gt;Na quarta iteração, é 3... é isso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/*
  0
  1
  2
  3
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MAS ALTO LÁ!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Se você não fornecer um valor inicial, não existirá o index 0, e começará diretamente no index 1&lt;/strong&gt;. Isso acontece porque, como falei lá no começo, sem o valor inicial acontece uma iteração a menos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;atual&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/*
  1
  2
  3
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode usar o parâmetro index para auxiliar em muitos desafios do dia a dia.&lt;/p&gt;

&lt;p&gt;Acesse os posts que linkei sobre outros métodos de array. Lá você encontrará diversos exemplo de como usar o parâmetro index.&lt;/p&gt;

&lt;h3&gt;
  
  
  O parâmetro "array"
&lt;/h3&gt;

&lt;p&gt;Esse é o único parâmetro que não muda de valor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ele sempre representa a array que você está iterando&lt;/strong&gt;. Não recomendo usar esse parâmetro para alterar a array enquanto executa o reduce nela. Apenas faça consultas para outras operações.&lt;/p&gt;

&lt;p&gt;Além dos exemplos com o index, nos outros posts você também encontrará desafios com o parâmetro array.&lt;/p&gt;




&lt;p&gt;Se você já leu os outros posts dessa série, sabe o que eu sempre digo. Não basta entender o método apenas na teoria, você precisa saber quando aplicar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como saber o momento de usar o reduce?
&lt;/h2&gt;

&lt;p&gt;Essa é uma pergunta bem complicada.&lt;/p&gt;

&lt;p&gt;Se você leu tudo até agora, primeiramente parabéns. Segundamente, você percebeu que o reduce é um método bastante genérico. Isso porque além de poder substituir outros métodos (map, filter, find, every e some), ele também pode retornar qualquer tipo de dado.&lt;/p&gt;

&lt;p&gt;E essa amplitude torna a resposta muito difícil, mas arrisco dizer que para usar o reduce você precisa de 3 coisas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Você precisa de um dado
&lt;/h3&gt;

&lt;p&gt;Precisar de um dado é algo raro na programação (ironia).&lt;/p&gt;

&lt;p&gt;Esse dado pode ser string, number, booleano, objeto ou até outra array.&lt;/p&gt;

&lt;p&gt;Mas, já que você precisa manipular dados a todo momento, como saber se deve usar o reduce ou outro método?&lt;/p&gt;

&lt;h3&gt;
  
  
  Nenhum outro método de array dá conta do problema
&lt;/h3&gt;

&lt;p&gt;Daí sobrou apenas o reduce.&lt;/p&gt;

&lt;p&gt;Na minha opinião, quando nenhum outro método de array em Javascript dá conta de gerar esse dado para você, use o reduce.&lt;/p&gt;

&lt;p&gt;Ao longo desse post você viu como resolver o mesmo desafio com reduce ou outros métodos. Esses são exemplos onde você &lt;strong&gt;não&lt;/strong&gt; precisa usar o reduce.&lt;/p&gt;

&lt;p&gt;Por outro lado, lembra do exemplo de somar o valor total dos produtos em um ecommerce? Esse desafio exige o uso do reduce. Existem outras formas como usar uma iteração com &lt;code&gt;for&lt;/code&gt;, mas prefiro a programação funcional.&lt;/p&gt;

&lt;p&gt;Porém, existem casos onde &lt;strong&gt;&lt;em&gt;depende&lt;/em&gt;&lt;/strong&gt;. Lembra daquele exemplo da array de produtos? E se você precisar dizer se todos os produtos da array possuem preço acima de R$ 300?&lt;/p&gt;

&lt;p&gt;Você pode simplesmente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Usar o reduce&lt;/li&gt;
&lt;li&gt;Definir o valor inicial como &lt;code&gt;true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;E retornar &lt;code&gt;acumulado &amp;amp;amp;&amp;amp;amp;&lt;/code&gt; um valor booleano que diz se o produto possui preço acima de R$ 300
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1a2b3c4d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Camiseta Básica&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Branca&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5e6f7g8h&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Calça Jeans&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Azul&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;9i0j1k2l&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bolsa de Couro&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Marrom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Único&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3m4n5o6p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tênis Esportivo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Preto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;42&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7q8r9s0t&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vestido Floral&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Rosa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;350&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acumulado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;produtoAtual&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;produtoAtualAcima300&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;produtoAtual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acumulado&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;produtoAtualAcima300&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas se o reduce for muito complicado, você pode concatenar um map com um every:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O map irá converter a array de produtos em uma array que contém apenas os preços dos produtos&lt;/li&gt;
&lt;li&gt;O every vai verificar se essa array contém apenas números acima de 300
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;produto&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;produto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do meu ponto de vista, a lógica é mais fácil de entender, mas exige duas iterações. Já o reduce é mais complicadinho, mas itera uma vez só. Tudo depende.&lt;/p&gt;

&lt;h3&gt;
  
  
  Você tem uma array em mãos
&lt;/h3&gt;

&lt;p&gt;O último critério para saber se você precisa do reduce é ter uma array.&lt;/p&gt;

&lt;p&gt;Isso porque o reduce é um método de array. Não é possível executar ele a partir de uma string, número, booleano ou objeto, a menos que você converta isso para uma array antes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Callback
&lt;/h2&gt;

&lt;p&gt;Quanta coisa ein...&lt;/p&gt;

&lt;p&gt;Recapitulando, o reduce é um método de array em Javascript que reduz uma array a apenas um valor, converte em outra array, manipula, e pode retornar qualquer tipo de dado.&lt;/p&gt;

&lt;p&gt;O primeiro parâmetro do reduce é uma função callback que pode receber até 4 parâmetros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O valor acumulado das últimas iterações&lt;/li&gt;
&lt;li&gt;O item atual da array&lt;/li&gt;
&lt;li&gt;O index&lt;/li&gt;
&lt;li&gt;E a própria array que você está iterando&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O segundo parâmetro do reduce é o valor inicial das iterações. Esse é o valor do primeiro parâmetro da função callback na primeira iteração. Se você não informar ele (mas recomendo que sempre faça isso), haverá uma iteração a menos.&lt;/p&gt;

&lt;p&gt;Até a penúltima iteração, o retorno da função callback do reduce define qual será o valor do parâmetro &lt;code&gt;acumulado&lt;/code&gt; na próxima. Na última, o retorno da função callback é o próprio return do reduce.&lt;/p&gt;

&lt;p&gt;O reduce é um método tão flexível, que pode substituir outros métodos de array em Javascript, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;map&lt;/li&gt;
&lt;li&gt;filter&lt;/li&gt;
&lt;li&gt;find&lt;/li&gt;
&lt;li&gt;every&lt;/li&gt;
&lt;li&gt;some&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Saber o momento certo de usar o reduce pode ser um pouco complicado. Mas posso dizer que é quando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Você precisa de um dado&lt;/li&gt;
&lt;li&gt;Nenhum outro método Javascript é capaz de gerar esse dado&lt;/li&gt;
&lt;li&gt;Esse dado vem de uma array&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se é possível suar ao escrever um texto tão denso e com um tópico tão difícil de explicar, então eu suei escrevendo esse texto haha.&lt;/p&gt;

&lt;p&gt;O reduce é um método que exige conhecimento de vários outros tópicos em Javascript para compreender bem. Então se algo ficou complicado, volte aqui depois de um tempo, garanto que você irá perceber coisas novas.&lt;/p&gt;

&lt;p&gt;Esse é o último post de uma série de 6 artigos sobre métodos de array em Javascript. Linkei todos os outros 5 foram aqui em algum momento do texto.&lt;/p&gt;

&lt;p&gt;Obrigado pela sua leitura. Deixe um comentário se ficou com dúvidas.&lt;/p&gt;

&lt;p&gt;Se esse artigo te ajudou de alguma forma, e ficou com vontade de dizer um &lt;strong&gt;obrigado&lt;/strong&gt;, compartilhe com um amigo ou nas redes sociais.&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

</description>
      <category>reduce</category>
      <category>javascript</category>
      <category>array</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Every e some: os métodos de array em Javascript que respondem "sim" ou "não"</title>
      <dc:creator>deMenezes</dc:creator>
      <pubDate>Thu, 16 Nov 2023 02:08:50 +0000</pubDate>
      <link>https://dev.to/demenezes/every-e-some-os-metodos-de-array-em-javascript-que-respondem-sim-ou-nao-3n4j</link>
      <guid>https://dev.to/demenezes/every-e-some-os-metodos-de-array-em-javascript-que-respondem-sim-ou-nao-3n4j</guid>
      <description>&lt;h2&gt;
  
  
  Os métodos de array every e some em Javascript servem para responder perguntas com "sim" ou "não", ou "true" e "false". Clique e confira.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tudo&lt;/strong&gt; ou &lt;strong&gt;pelo menos um&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Essa é a forma mais resumida de explicar o every e some em Javascript:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O método &lt;strong&gt;every&lt;/strong&gt; ("todo" ou "toda" em inglês) responde se &lt;strong&gt;todos&lt;/strong&gt; os itens de uma array atendem aos requisitos&lt;/li&gt;
&lt;li&gt;Já o &lt;strong&gt;some&lt;/strong&gt; ("algum" ou "alguma") diz se &lt;strong&gt;pelo menos algum&lt;/strong&gt; item atende aos requisitos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esse tipo de pergunta é respondida com "sim" ou "não". Ou na programação, &lt;strong&gt;true&lt;/strong&gt; ou &lt;strong&gt;false&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Por exemplo, todos os itens da array abaixo estão acima de zero?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1700007173-execucao-do-every-em-uma-array-com-return-false.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1700007173-execucao-do-every-em-uma-array-com-return-false.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="execução do every em uma array com return false" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A resposta é &lt;strong&gt;false&lt;/strong&gt;, ou "não", nem todos os números estão abaixo de zero. Se eu removesse o &lt;code&gt;-1&lt;/code&gt;, a resposta seria diferente.&lt;/p&gt;

&lt;p&gt;Com o some, a lógica é muito parecida. Porém basta que um item atenda aos requisitos para o retorno ser &lt;strong&gt;true&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1700007200-execucao-do-some-em-uma-array-com-return-true.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1700007200-execucao-do-some-em-uma-array-com-return-true.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="execução do some em uma array com return true" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse caso, quatro dos cinco números da array estão acima de zero, então a resposta é "sim, pelo menos um número está acima de zero".&lt;/p&gt;

&lt;p&gt;Veja agora outros detalhes importantes sobre esses métodos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every e some em Javascript
&lt;/h2&gt;

&lt;p&gt;Como já falei, esses métodos são muito parecidos.&lt;/p&gt;

&lt;p&gt;Então de agora em diante, tudo que você ler se aplica a ambos. A única diferença entre eles já expliquei na introdução, e vou mostrar nos desafios também.&lt;/p&gt;

&lt;p&gt;A estrutura desses métodos é receber uma função callback que executa a cada item da array:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="cm"&gt;/* 
  3
  7
  -1
  7
  10
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eles devem "partir" de uma array, já que ela é dona desses métodos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Ou&lt;/span&gt;

&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Ou&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Ou&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou seja: algo que represente uma array + o ponto + o nome do método.&lt;/p&gt;

&lt;p&gt;Apesar de haver uma iteração, o every e o some podem não executar em todos os itens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every e some podem parar de executar no meio da array
&lt;/h2&gt;

&lt;p&gt;E isso não é por preguiça.&lt;/p&gt;

&lt;p&gt;Esses métodos não precisam executar em todos os itens da array. Dependendo dos primeiros resultados, a resposta final não mudará.&lt;/p&gt;

&lt;p&gt;Acompanhe esse raciocínio do every:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Já que o every responde se &lt;strong&gt;todos os itens da array atendem aos requisitos&lt;/strong&gt;, se qualquer item não atender, a resposta final já será &lt;code&gt;false&lt;/code&gt;. Mesmo que todos os outros sejam &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1700007232-every-em-javascript-parando-no-meio-da-execucao.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1700007232-every-em-javascript-parando-no-meio-da-execucao.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="every em javascript parando no meio da execução" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;O número atual é: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;O resultado é: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse código mostra no console o número atual a cada iteração. E no final exibe o resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;O número atual é: 2
O número atual é: -3
O resultado é: false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Na primeira iteração, &lt;code&gt;number&lt;/code&gt; é 2, e tudo bem, já que ele está acima de zero. Porém na segunda iteração (-3), o próximo console já é o resultado final, ou seja, ele não iterou pelos números 4, 5 e 6.&lt;/p&gt;

&lt;p&gt;Isso acontece porque, mesmo que todos os outros itens retornem &lt;code&gt;true&lt;/code&gt;, já se sabe que &lt;strong&gt;nem todos&lt;/strong&gt; os itens atendem aos requisitos.&lt;/p&gt;

&lt;p&gt;Isso acontece porque, mesmo que os próximos itens retornem &lt;code&gt;true&lt;/code&gt;, &lt;strong&gt;nem todos&lt;/strong&gt; atendem aos requisitos.&lt;/p&gt;




&lt;p&gt;Com o some acontece a mesma coisa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Já que ele verifica se &lt;strong&gt;pelo menos um item da array atende aos requisitos&lt;/strong&gt;, caso ele encontre um que não atende, não tem porquê continuar a execução.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1700007254-some-em-javascript-parando-no-meio-da-execucao.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1700007254-some-em-javascript-parando-no-meio-da-execucao.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="some em javascript parando no meio da execução" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A array de exemplo abaixo é um pouco diferente mas a lógica do teste com os consoles é a mesma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;O número atual é: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;O resultado é: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado final será:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;O número atual é: 2
O número atual é: 3
O número atual é: 4
O número atual é: -5
O resultado é: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando o some encontra o primeiro número abaixo de zero (o critério), ele finaliza, já que &lt;strong&gt;pelo menos um&lt;/strong&gt; item atende aos requisitos. É por isso que após o console do -5, vem o resultado, porque o some não iterou no último número, o 6.&lt;/p&gt;




&lt;p&gt;Acho que já ficou claro para você, mas o retorno da função callback de every e some é bem importante.&lt;/p&gt;

&lt;h2&gt;
  
  
  O retorno da função callback de every e some
&lt;/h2&gt;

&lt;p&gt;O retorno sempre é um booleano.&lt;/p&gt;

&lt;p&gt;Isso acontece porque e cada iteração, é preciso dizer se o item atende ou não aos requisitos. E isso sempre acontece com um &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;E se eu retornar algo que não é um booleano?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eu retornei o próprio &lt;code&gt;number&lt;/code&gt;, e o resultado final foi &lt;code&gt;false&lt;/code&gt;. Por quê?!&lt;/p&gt;

&lt;p&gt;Quando o retorno não é um booleano explícito, o Javascript converte para poder prosseguir. Essa conversão se chama &lt;strong&gt;coerção de tipos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Veja o que acontece com cada conversão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; é &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;O resultado é: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adicionei um novo console dentro da função callback para mostrar como fica cada número após a conversão. E olha no que deu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-1 é true
0 é false
O resultado é: false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;O ponto principal é: qualquer número que não seja zero, quando você converte para booleano, vira &lt;code&gt;true&lt;/code&gt;. Assim que o every encontrou o zero, ele retornou &lt;code&gt;false&lt;/code&gt; e parou a execução.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O mesmo acontece com o some:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; é &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;O resultado é: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/*
  -1 é true
  O resultado é: true
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando o some encontra o &lt;code&gt;-1&lt;/code&gt;, que é &lt;code&gt;true&lt;/code&gt; após a conversão, ele já finaliza.&lt;/p&gt;

&lt;p&gt;Então nunca esqueça: o retorno da função callback de every e some sempre é um booleano.&lt;/p&gt;

&lt;p&gt;Em todos os exemplos que dei, a função callback recebeu apenas o número como parâmetro. Mas é possível deixar a brincadeira mais interessante.&lt;/p&gt;

&lt;h2&gt;
  
  
  Os parâmetros da função callback de every e some
&lt;/h2&gt;

&lt;p&gt;A função callback pode receber até 3 parâmetros:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Item&lt;/li&gt;
&lt;li&gt;Index&lt;/li&gt;
&lt;li&gt;Array&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A partir de agora vou explicar cada um e propor um desafio para fixar bem o conteúdo.&lt;/p&gt;

&lt;p&gt;Para isso, vou usar a array abaixo como base para os desafios (a área está em mil km²):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;São Paulo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SP&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1521&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;fusoHorario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UTC-3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;clubesFutebol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Corinthians&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Palmeiras&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;São Paulo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Santos&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Rio de Janeiro&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;RJ&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;fusoHorario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UTC-3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;clubesFutebol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Flamengo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fluminense&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vasco&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Botafogo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;     &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Brasília&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DF&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;fusoHorario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UTC-3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;clubesFutebol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Brasiliense&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Gama&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;                             &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Salvador&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;706&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;fusoHorario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UTC-3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;clubesFutebol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bahia&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vitória&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;                                &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fortaleza&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;314&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;fusoHorario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UTC-3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;clubesFutebol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ceará&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fortaleza&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;                              &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Belo Horizonte&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MG&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;331&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;fusoHorario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UTC-3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;clubesFutebol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Atlético Mineiro&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cruzeiro&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;                    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Manaus&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;         &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AM&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;11400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;fusoHorario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UTC-4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;clubesFutebol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fast Clube&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;                                      &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Curitiba&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PR&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;435&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;fusoHorario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UTC-3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;clubesFutebol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Atlético Paranaense&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Coritiba&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;                 &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Recife&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;         &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;218&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;fusoHorario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UTC-3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;clubesFutebol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Náutico&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sport&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;                                &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Porto Alegre&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;RS&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;496&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;fusoHorario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UTC-3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;clubesFutebol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Grêmio&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Internacional&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;                         &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Veja agora cada um dos parâmetros.&lt;/p&gt;

&lt;h3&gt;
  
  
  Primeiro parâmetro: item
&lt;/h3&gt;

&lt;p&gt;O primeiro parâmetro você já conhece.&lt;/p&gt;

&lt;p&gt;É o único obrigatório e usei ele em todos os exemplos até agora. Então resolva esse desafio: &lt;em&gt;todas as 10 maiores cidades do Brasil têm uma área acima de 300 mil km²?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Aqui, basta verificar a propriedade &lt;code&gt;.area&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;area&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado é &lt;code&gt;false&lt;/code&gt;, porque &lt;strong&gt;nem todas as cidades&lt;/strong&gt; possuem área acima de 300 mil km². Recife quebra esse padrão por ter apenas 218 mil km². Agora, se eu alterar o critério para 200 mil Km², o resultado muda:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;area&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Agora um desafio para resolver com o some: &lt;em&gt;entre as 10 maiores cidades do Brasil, existe alguma da Bahia (BA)?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;O interessante desse tipo de teste é que você pode bater o olho na array e descobrir a resposta final. E depois que aplicar o código, fará a prova real (até rimou). Acredito que é muito produtivo aprender assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;estado&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui apenas verifico se a propriedade &lt;code&gt;.estado&lt;/code&gt; das cidades é igual ao estado da Bahia. Como existe &lt;strong&gt;pelo menos um item na array que atende ao requisito&lt;/strong&gt;, o resultado final é &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Os desafios foram fáceis? Legal, veja agora o próximo parâmetro.&lt;/p&gt;

&lt;h3&gt;
  
  
  Segundo parâmetro: index
&lt;/h3&gt;

&lt;p&gt;Ele é um número.&lt;/p&gt;

&lt;p&gt;Na primeira iteração seu valor é zero, e a partir das próximas aumenta de 1 em 1.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="cm"&gt;/*
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O último index é sempre igual à quantidade de itens da array menos 1. É por isso que o último index da array de cidades é 9, pois tem 10 itens.&lt;/p&gt;

&lt;p&gt;Esse número é muito útil para várias situações, como por exemplo resolver o próximo desafio: &lt;em&gt;verifique se todas as cidades estão no fuso horário &lt;code&gt;UTC-3&lt;/code&gt;, com exceção do item na posição 6&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Quero deixar claro que esse desafio serve apenas para você entender o parâmetro &lt;code&gt;index&lt;/code&gt;. Dificilmente você encontrará isso em um projeto real.&lt;/p&gt;

&lt;p&gt;Para começar o código, vou criar um &lt;code&gt;if&lt;/code&gt; que ignora o item 6 (cidade de Manaus, a única com fuso horário UTC-4). Quando ele vier, retorno &lt;code&gt;true&lt;/code&gt; para que ele não altere o resultado final:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O código ainda não está pronto, pois preciso lidar com todos os outros itens da array. E para isso vou adicionar um outro &lt;code&gt;if&lt;/code&gt; que verifica o fuso horário deles. Se for "UTC-3", retorno &lt;code&gt;true&lt;/code&gt; também. Por fim, deixo um &lt;code&gt;return false&lt;/code&gt; para todos os outros casos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fusoHorario&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UTC-3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado final é &lt;code&gt;true&lt;/code&gt;, já que, com exceção de Manaus, todas as outras cidades estão no fuso horário UTC-3. Se você fizer o teste de remover o primeiro &lt;code&gt;if&lt;/code&gt;, verá que o resultado final muda para &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;Agora um desafio com o some: &lt;em&gt;descubra se a array tem pelo menos uma cidade que tem apenas um clube de futebol na propriedade &lt;code&gt;clubesFutebol&lt;/code&gt;, com exceção do index 6.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;O código começa bem parecido com o anterior:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eu verifico se o index é 6, e nesse caso retorno &lt;code&gt;false&lt;/code&gt; e não &lt;code&gt;true&lt;/code&gt;. Isso porque, caso eu retornasse &lt;code&gt;true&lt;/code&gt;, eu não responderia à pergunta do desafio e sim outra pergunta. Que seria &lt;em&gt;a array de cidade tem algum item no índice 6?&lt;/em&gt; ou &lt;em&gt;a array de cidades tem pelo menos 7 itens?&lt;/em&gt;. E é mais simples responder essas perguntas de outras formas.&lt;/p&gt;

&lt;p&gt;Se o index não for 6, então adiciono outro &lt;code&gt;if&lt;/code&gt; para verificar quantos times tem a array &lt;code&gt;clubesFutebol&lt;/code&gt;. Se for 1, retorno &lt;code&gt;true&lt;/code&gt; significa que achei minha resposta e o some finaliza a execução. Ao final deixo um &lt;code&gt;return false&lt;/code&gt; para deixar claro que acontece, mas ele é opcional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

 &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clubesFutebol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A resposta final é &lt;code&gt;false&lt;/code&gt;, porque, com exceção do item no índice 6, todos os outros tem mais de 1 clube na array &lt;code&gt;clubesFutebol&lt;/code&gt;. Assim como no exemplo anterior, se você remover o primeiro &lt;code&gt;if&lt;/code&gt;, verá que o resultado muda para &lt;code&gt;true&lt;/code&gt;. Justamente pela cidade de Manaus que tem apenas o Fast Clube na array.&lt;/p&gt;




&lt;p&gt;O index também é importante para outras operações, como descobrir se o item está em uma posição par ou impar na array. Expliquei isso nesse post sobre o &lt;a href="https://demenezes.dev/posts/map-javascript-array/#o-segundo-par%C3%A2metro-do-map--index" rel="noopener noreferrer"&gt;método map em Javascript&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Veja agora o último parâmetro da função callback.&lt;/p&gt;

&lt;h3&gt;
  
  
  Terceiro parâmetro: array
&lt;/h3&gt;

&lt;p&gt;Esse é o único parâmetro que não muda.&lt;/p&gt;

&lt;p&gt;Ao longo das iterações, seu valor sempre é a array que você está iterando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// maioresCidadesBrasil: [ ... ]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O código acima escreve no console a array &lt;code&gt;maioresCidadesBrasil&lt;/code&gt; a cada iteração. É importante você usar esse parâmetro apenas como consulta para outras operações, e nunca para mudar a array.&lt;/p&gt;

&lt;p&gt;Esse último desafio farei apenas com o some: &lt;em&gt;a array possui duas cidades no mesmo estado&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;Por favor, muita atenção, isso aqui é muito importante. Num primeiro momento, parece que o some não pode resolver o desafio. Mas é seu trabalho como pessoa programadora transpor o problema de negócio (nesse caso, o desafio) para o código.&lt;/p&gt;

&lt;p&gt;Então você pode ler a frase do desafio de outra forma: &lt;em&gt;existe pelo menos uma cidade que tenha o valor da propriedade &lt;code&gt;estado&lt;/code&gt; igual a de outra cidade?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Agora que eu coloquei o trecho &lt;strong&gt;pelo menos&lt;/strong&gt; no meio do desafio, ficou mais claro?&lt;/p&gt;

&lt;p&gt;Começo o código com a variável &lt;code&gt;quantidade&lt;/code&gt;. Ela irá contar quantas cidades fazem parte do mesmo estado da cidade da iteração atual. E isso acontece a cada iteração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;quantidade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Criei a variável &lt;code&gt;quantidade&lt;/code&gt; que vai contar isso para mim. Agora, dentro da função callback vou fazer um &lt;code&gt;for&lt;/code&gt; no parâmetro &lt;code&gt;array&lt;/code&gt;. Dentro do &lt;code&gt;for&lt;/code&gt;, se o estado for igual ao estado da cidade que estou iterando no every, adiciono 1 a essa variável:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;quantidade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;estado&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;quantidade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;quantidade&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;quantidade&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 1&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No final, eu coloquei um console na variável e um &lt;code&gt;return true&lt;/code&gt;, que serve apenas para o every iterar até o final. O console sempre vai me mostrar o valor 1, ou seja, existe apenas uma cidade para cada estado na array. Se você voltar no começo do post para conferir a array, verá que isso está certo.&lt;/p&gt;

&lt;p&gt;Logo, é possível prever que o resultado final é &lt;code&gt;false&lt;/code&gt;, porque &lt;em&gt;não há duas cidades no mesmo estado&lt;/em&gt;. Para confirmar isso vou adicionar o último &lt;code&gt;if&lt;/code&gt; no código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;maioresCidadesBrasil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;quantidade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;estado&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;quantidade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;quantidade&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;quantidade&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para você compreender melhor o que aconteceu, mude o estado de alguma cidade para outro já existente. Por exemplo, coloque a propriedade &lt;code&gt;estado&lt;/code&gt; de Porto Alegre para &lt;code&gt;"PE"&lt;/code&gt;. Você verá que o resultado final mudará para &lt;code&gt;true&lt;/code&gt;, porque agora sim &lt;em&gt;a array possui duas cidades no mesmo estado&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Como já falei aqui no blog nos outros posts dessa série de métodos de array, não basta saber usar na teoria. É preciso entender o momento certo de aplicar cada um.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como saber quando usar o every e some em Javascript?
&lt;/h2&gt;

&lt;p&gt;Não é em every momento que esses métodos são úteis, mas isso acontece some vezes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1653006346-tim-mossholder-imld5dbclm4-unsplash-1.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1653006346-tim-mossholder-imld5dbclm4-unsplash-1.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="Escrita " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para saber que é o momento de usar o every e some em Javascript, siga esses 2 passos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Responder uma pergunta com "sim" ou "não"
&lt;/h3&gt;

&lt;p&gt;Para começar, esses métodos são úteis em situações onde você precisa de um "sim" ou "não", verdadeiro ou falso, &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt; como resposta.&lt;/p&gt;

&lt;p&gt;As perguntas seguem quase sempre esse modelo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Every&lt;/strong&gt;: "Todos os itens dessa lista atendem aos requisitos?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Some&lt;/strong&gt;: "Pelo menos um item dessa lista atende aos requisitos?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perceba que um simples "sim" ou "não" responde essas perguntas.&lt;/p&gt;

&lt;p&gt;Isso é um ponto importante porque o retorno de every e some sempre é um booleano.&lt;/p&gt;

&lt;h3&gt;
  
  
  Você já tem uma array
&lt;/h3&gt;

&lt;p&gt;Every e some são métodos de array, então você precisa de uma para começar.&lt;/p&gt;

&lt;p&gt;Não é possível usá-los com string, number ou objeto, a não ser que você os converta em array antes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Callback
&lt;/h2&gt;

&lt;p&gt;Every e some são métodos de array em Javascript muito importantes.&lt;/p&gt;

&lt;p&gt;Eles respondem perguntas com "sim" ou "não", ou &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;O every responde se &lt;strong&gt;todos os itens&lt;/strong&gt; de uma array atendem aos requisitos da função callback. Já o some diz se &lt;strong&gt;pelo menos um item&lt;/strong&gt; da array atende aos requisitos.&lt;/p&gt;

&lt;p&gt;Eles podem não iterar até o fim da array. Isso porque a resposta pode chegar antes. Se o every encontrar pelo menos 1 &lt;code&gt;false&lt;/code&gt;, a resposta final é &lt;code&gt;false&lt;/code&gt;. Da mesma forma, se o some encontrar pelo menos 1 &lt;code&gt;true&lt;/code&gt;, a resposta final será &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;O retorno da função callback sempre será um valor booleano. Se o valor que você retornou não for um, o Javascript fará a coerção de tipo para garantir isso.&lt;/p&gt;

&lt;p&gt;A função callback tem 3 parâmetros. O &lt;strong&gt;item&lt;/strong&gt; de cada iteração, seu &lt;strong&gt;índice&lt;/strong&gt; e a própria &lt;strong&gt;array&lt;/strong&gt; que você está iterando.&lt;/p&gt;

&lt;p&gt;Para saber o momento de usar every e some, preste atenção nesses dois requisitos. Primeiro, eles funcionam em situações onde você precisa responder uma pergunta com "sim" ou "não". E por último, você tem uma array para realizar essa operação.&lt;/p&gt;

&lt;p&gt;De todos os artigos sobre métodos de array, esse foi um dos mais legais e mais trabalhosos. Porque foi o único com dois métodos no mesmo texto.&lt;/p&gt;

&lt;p&gt;Se você perdeu os outros, veja aqui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://demenezes.dev/posts/como-usar-foreach-javascript-exemplos/" rel="noopener noreferrer"&gt;Como usar o forEach em Javascript: exemplos detalhados contados em uma história&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://demenezes.dev/posts/map-javascript-array/" rel="noopener noreferrer"&gt;Transforme arrays em ouro: aprenda a manipular dados com o map() em Javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://demenezes.dev/posts/filter-javascript-array/" rel="noopener noreferrer"&gt;Domine o método Filter e simplifique sua lógica com arrays em Javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://demenezes.dev/posts/find-javascript-array/" rel="noopener noreferrer"&gt;O método find e a busca ao modo CTRL + F em JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Além desse, ainda sairá o último artigo sobre o método reduce. Então aguarde só mais uns dias :) &lt;/p&gt;

&lt;p&gt;Obrigado pela sua leitura.&lt;/p&gt;

&lt;p&gt;Ficou com alguma dúvida? Comente abaixo que será um prazer responder.&lt;/p&gt;

&lt;p&gt;Se esse artigo te ajudou de alguma forma, e você sentiu vontade de dizer um &lt;strong&gt;obrigado&lt;/strong&gt;, compartilhe com um amigo ou nas suas redes sociais.&lt;/p&gt;

&lt;p&gt;Até mais.&lt;/p&gt;

</description>
      <category>some</category>
      <category>every</category>
      <category>javascript</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>O método find e a busca ao modo CTRL + F em JavaScript</title>
      <dc:creator>deMenezes</dc:creator>
      <pubDate>Thu, 02 Nov 2023 11:30:05 +0000</pubDate>
      <link>https://dev.to/demenezes/o-metodo-find-e-a-busca-ao-modo-ctrl-f-em-javascript-27el</link>
      <guid>https://dev.to/demenezes/o-metodo-find-e-a-busca-ao-modo-ctrl-f-em-javascript-27el</guid>
      <description>&lt;h2&gt;
  
  
  O método find em Javascript é um dos mais simples de entender, porque ele funciona muito igual ao atalho CTRL+F
&lt;/h2&gt;

&lt;p&gt;Qual é a melhor ferramenta do mundo?&lt;/p&gt;

&lt;p&gt;Claro que é o &lt;code&gt;CTRL + F&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Quase todos os programas que uso (pelo menos os que respeito) permitem fazer uma busca. Seja:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Buscar texto em uma página web&lt;/li&gt;
&lt;li&gt;Buscar arquivos ou outras informações em um banco de dados&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O próprio VS Code permite buscar um termo em todos os arquivos do projeto atual, é mágico. Aqui tem uma série de &lt;a href="https://demenezes.dev/posts/atalhos-vs-code-aumentar-produtividade/" rel="noopener noreferrer"&gt;atalhos do VS Code&lt;/a&gt;, caso você se interesse.&lt;/p&gt;

&lt;p&gt;Se esse recurso é familiar para você, vai ser bem fácil entender esse artigo. &lt;strong&gt;O find do encontra o primeiro item dentro de uma array que atende a um ou mais critérios e retorna esse item&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Veja um exemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1698714568-representacao-grafica-de-um-find-simples-em-javascript.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1698714568-representacao-grafica-de-um-find-simples-em-javascript.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="representação gráfica de um find simples em javascript" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Veja que o find não retorna uma array &lt;code&gt;[ 6 ]&lt;/code&gt;, e sim o item &lt;code&gt;6&lt;/code&gt; sozinho. Já que 6 é o primeiro item acima de 5, o find retorna ele e pára a execução.&lt;/p&gt;

&lt;p&gt;Por outro lado, se a array for composta por outras arrays, é claro que o retorno será uma array:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arrays&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;array de&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dois itens&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;array de&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;três&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;itens&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;array&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;grandona&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;de&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;itens&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arrays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ 'array de' ,'três', 'itens' ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O exemplo acima retorna uma array de 3 itens, porque ele é um item único dentro da array que você executou o find. Só por isso.&lt;/p&gt;

&lt;p&gt;Caso você precise de &lt;strong&gt;todos os itens&lt;/strong&gt; em uma array que atenda a um ou mais requisitos, prefira usar o &lt;a href="https://demenezes.dev/posts/filter-javascript-array/" rel="noopener noreferrer"&gt;método filter em Javascript&lt;/a&gt;. Esse sim vai retornar um array.&lt;/p&gt;

&lt;p&gt;Agora que você tem uma visão geral sobre o método find, veja mais alguns pontos importantes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estrutura do método find em Javascript
&lt;/h2&gt;

&lt;p&gt;Foco na função callback.&lt;/p&gt;

&lt;p&gt;O método find recebe uma função callback como parâmetro, e retorna &lt;code&gt;true&lt;/code&gt; quando encontrar o item que procura.&lt;/p&gt;

&lt;p&gt;No exemplo da array de números, a função callback é esse trecho:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perceba que chamei o parâmetro dela de &lt;code&gt;number&lt;/code&gt;. A cada iteração, essa variável aponta para um item diferente da array original.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logo após encontrar o item, o find pára de executar&lt;/strong&gt;, o que é ótimo para performance. Para mostrar isso, vou colocar um &lt;code&gt;console.log()&lt;/code&gt; a cada iteração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;O número atual é: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/* ************************

  O número atual é: 0
  O número atual é: 3
  O número atual é: 1
  O número atual é: 6
  6

************************ */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repare que o resultado coloca no console apenas os números até o 6, pois é ele que atende ao requisito de ser maior que 5. Durante todos esses consoles, o find caiu no &lt;code&gt;else&lt;/code&gt;, ou seja, &lt;code&gt;return false&lt;/code&gt;. Assim que o número 6 surgiu, por ser maior que 5 o find caiu no &lt;code&gt;return true&lt;/code&gt; e os próximos consoles não executaram.&lt;/p&gt;

&lt;p&gt;Percebeu a importância do retorno da função callback? E é dela que vou falar agora.&lt;/p&gt;

&lt;h2&gt;
  
  
  O retorno da função callback do find
&lt;/h2&gt;

&lt;p&gt;O retorno dela sempre será um booleano.&lt;/p&gt;

&lt;p&gt;Isso fica claro nos exemplos, pois sempre coloco &lt;code&gt;return true&lt;/code&gt; ou &lt;code&gt;return false&lt;/code&gt;. Mas e se eu escrever assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eu não retornei um booleano diretamente, e sim a expressão lógica &lt;code&gt;number &amp;gt; 6&lt;/code&gt;. Ou seja, quando a variável &lt;code&gt;number&lt;/code&gt; estiver acima de 6, esse será o valor que o find retornará. E o resultado é 7.&lt;/p&gt;

&lt;p&gt;E se eu for além:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1698714655-representacao-grafica-de-um-find-com-coercao-de-tipo.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1698714655-representacao-grafica-de-um-find-com-coercao-de-tipo.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="representação gráfica de um find com coerção de tipo" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ficou um pouco estranho, mas é tranquilo de entender. &lt;strong&gt;A linha &lt;code&gt;return number&lt;/code&gt; converte a variável &lt;code&gt;number&lt;/code&gt; (que é do tipo number) para o tipo boolean&lt;/strong&gt;, e assim poder funcionar.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Na primeira iteração, acontece &lt;code&gt;return 0&lt;/code&gt;, e já que zero é o único "número &lt;code&gt;false&lt;/code&gt;", o find prossegue&lt;/li&gt;
&lt;li&gt;Na segunda iteração, acontece &lt;code&gt;return 3&lt;/code&gt;, que vira "&lt;code&gt;return true&lt;/code&gt;", e esse é o resultado&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essa conversão de number para boolean se chama coerção de tipo, um tópico muito importante em Javascript. Recomendo que você estude.&lt;/p&gt;

&lt;p&gt;E se o find não encontrar o que deseja? O retorno será &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1698714599-representacao-grafica-de-um-find-retornando-undefined.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1698714599-representacao-grafica-de-um-find-retornando-undefined.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="representação gráfica de um find retornando undefined" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você percebeu que em todos os exemplos, a função callback recebeu apenas 1 parâmetro? Essa função pode receber até 3 parâmetros. E vou mostrar cada um deles agora.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parâmetros da função callback do find
&lt;/h2&gt;

&lt;p&gt;Hora dos desafios!&lt;/p&gt;

&lt;p&gt;Vou deixar um desafio para você entender cada parâmetro que eu explicar. A array abaixo vai servir de exemplo para todos os desafios:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1a2b3c4d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Camiseta Básica&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Branca&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;M&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5e6f7g8h&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Calça Jeans&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Azul&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;L&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;9i0j1k2l&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bolsa de Couro&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Marrom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Único&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3m4n5o6p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tênis Esportivo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Preto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;42&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7q8r9s0t&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vestido Floral&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Rosa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;S&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;350&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Veja o primeiro parâmetro.&lt;/p&gt;

&lt;h3&gt;
  
  
  Parâmetro item
&lt;/h3&gt;

&lt;p&gt;Esse parâmetro você já conhece, mas será legal de revisar com um desafio.&lt;/p&gt;

&lt;p&gt;Veja: &lt;em&gt;encontre na array de produtos, aquele que tem o ID "3m4n5o6p"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Se você não caiu nesse capítulo do post de paraquedas, já sabe como resolver esse desafio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3m4n5o6p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="cm"&gt;/*
  Ou de uma forma mais curta:
  const result = products.find(product =&amp;gt; product.id === '3m4n5o6p');
*/&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/*
  {
    id: '3m4n5o6p',
    name: 'Tênis Esportivo',
    color: 'Preto',
    size: '42',
    weight: 300,
    availability: true
  }
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A função callback retorna o primeiro produto que tiver a propriedade &lt;code&gt;id&lt;/code&gt; igual a &lt;code&gt;"3m4n5o6p"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Essa aplicação do find é muito comum na vida real: pegar um item através de um identificar único. Veja o exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getProductById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myProduct&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getProductById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;9i0j1k2l&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myProduct&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/*
  {
    id: '9i0j1k2l',
    name: 'Bolsa de Couro',
    color: 'Marrom',
    size: 'Único',
    weight: 800,
    availability: false
  }
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O que aconteceu aqui foi o seguinte;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criei a função &lt;code&gt;getProductByID&lt;/code&gt; que pega um produto do banco de dados pelo ID&lt;/li&gt;
&lt;li&gt;Essa função recebe um ID específico no parâmetro e usa o método find exatamente como no exemplo anterior&lt;/li&gt;
&lt;li&gt;Depois executo essa função com o argumento &lt;code&gt;"9i0j1k2l"&lt;/code&gt; e coloco o retorno na variável &lt;code&gt;myProduct&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Essa variável recebe as informações do produto Bolsa de Couro&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Veja agora o próximo parâmetro do find em Javascript.&lt;/p&gt;

&lt;h3&gt;
  
  
  Parâmetro index
&lt;/h3&gt;

&lt;p&gt;O parâmetro index é um número, mas não qualquer número.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Na primeira iteração, ele é 0, depois 1, depois 2, depois 3&lt;/strong&gt;... Você entendeu né?&lt;/p&gt;

&lt;p&gt;Ele representa o índice de cada item da array original:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/*
  {
    id: '1a2b3c4d',
    name: 'Camiseta Básica',
    color: 'Branca',
    size: 'M',
    weight: 200,
    availability: true
  }
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O exemplo acima busca o item que tem o index igual a 0. É claro que esse código é desnecessário. Seria mais fácil escrever apenas &lt;code&gt;products[0]&lt;/code&gt;, mas a intenção é mostrar a aplicação do index.&lt;/p&gt;

&lt;p&gt;O desafio agora é: &lt;em&gt;encontre um produto que esteja disponível na loja, porém seu index não pode ser 0 nem 1&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Na vida real, esse tipo de critério é bem difícil de acontecer, mas isso serve para você ver uma das aplicações possíveis do parâmetro index.&lt;/p&gt;

&lt;p&gt;Então os critérios são dois:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Produto disponível: vou usar a propriedade &lt;code&gt;available&lt;/code&gt; igual a &lt;code&gt;true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Index diferente de 1: vou usar o parâmetro &lt;code&gt;index&lt;/code&gt; e &lt;code&gt;!== 0&lt;/code&gt; e &lt;code&gt;!== 1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O código fica assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;availability&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/*
  {
    id: '3m4n5o6p',
    name: 'Tênis Esportivo',
    color: 'Preto',
    size: '42',
    weight: 300,
    availability: true
  }
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bem parecido com os desafios anteriores. As condições de disponibilidade e índice estão dentro do &lt;code&gt;if&lt;/code&gt;, e se o retorno será &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt; depende do resultado dessa operação lógica.&lt;/p&gt;

&lt;p&gt;Por fim, veja agora o último parâmetro da função callback do find.&lt;/p&gt;

&lt;h3&gt;
  
  
  Parâmetro array
&lt;/h3&gt;

&lt;p&gt;Esse é o terceiro parâmetro.&lt;/p&gt;

&lt;p&gt;Veja ele no exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Esse parâmetro não varia a cada iteração, ele tem sempre o mesmo valor: a array que você está iterando&lt;/strong&gt;. Nesse exemplo ele sempre será a lista com as informações dos produtos.&lt;/p&gt;

&lt;p&gt;Sugiro que você não use esse parâmetro para alterar a lista, apenas consultá-la para outras operações.&lt;/p&gt;

&lt;p&gt;E é aí que entra o desafio: &lt;em&gt;encontre o primeiro item da array que tenha um valor na propriedade &lt;code&gt;availability&lt;/code&gt; que nenhum outro item tem&lt;/em&gt;. Ou seja, só vai retornar &lt;code&gt;true&lt;/code&gt; quando o valor dessa propriedade não se repetir em outro elemento.&lt;/p&gt;

&lt;p&gt;Para começar, vou pegar o valor dessa propriedade:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;availability&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora preciso descobrir se o valor de &lt;code&gt;availability&lt;/code&gt; em cada iteração é único ou se repete na array. Para isso, vou criar uma variável &lt;code&gt;quantity&lt;/code&gt; que irá contar a quantidade desse valor na array:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;availability&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;quantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ela inicia em 0, e agora vou incrementar ela. Para isso, vou fazer um &lt;code&gt;for&lt;/code&gt; na array e incrementar o valor dessa variável quando o &lt;code&gt;availability&lt;/code&gt; dos outros produtos for igual ao atual:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;availability&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;quantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;availability&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;quantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;quantity&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Na penúltima linha, coloquei um console para ver o valor dessa variável. O resultado é esse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4
4
1
4
4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Os seja nas duas primeiras iterações (produtos &lt;em&gt;Camiseta Básica&lt;/em&gt; e &lt;em&gt;Calça Jeans&lt;/em&gt;), o valor da propriedade &lt;code&gt;availability&lt;/code&gt; deles se repete 4 vezes na array. Esse valor é &lt;code&gt;true&lt;/code&gt;. Na terceira iteração (produto &lt;em&gt;Bolsa de Couro&lt;/em&gt;), o valor é 1, porque só existe um produto com &lt;code&gt;availability: false&lt;/code&gt;. Na duas últimas iterações, novamente você vê que o número 4 se repete, pois são dois produtos com &lt;code&gt;availability: true&lt;/code&gt;, &lt;em&gt;Tênis Esportivo&lt;/em&gt; e &lt;em&gt;Vestido Floral&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Logo, &lt;em&gt;o único produto da array que tem um valor na propriedade &lt;code&gt;availability&lt;/code&gt; que nenhum outro produto tem&lt;/em&gt;, é o da terceira iteração. Ou seja, Bolsa de Couro.&lt;/p&gt;

&lt;p&gt;Agora vou fazer a prova real para ver se essa realmente é a resposta do desafio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;availability&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;quantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;availability&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;quantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;quantity&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;quantity&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/*
  {
    id: '9i0j1k2l',
    name: 'Bolsa de Couro',
    color: 'Marrom',
    size: 'Único',
    weight: 800,
    availability: false
  }
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E é isso mesmo.&lt;/p&gt;




&lt;p&gt;Como sempre digo por aqui, não basta saber a teoria e os comandos das linguagens, é preciso saber o momento de usar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quando usar o find
&lt;/h2&gt;

&lt;p&gt;Aqui, não tem muito mistério.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que você precisa?
&lt;/h3&gt;

&lt;p&gt;A resposta para essa pergunta é &lt;em&gt;"eu preciso de um item de dentro de uma array"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Isso significa que você tem uma array e precisa pegar &lt;strong&gt;apenas um item&lt;/strong&gt; de dentro dela.&lt;/p&gt;

&lt;p&gt;Caso você precise de mais de um item, use o &lt;a href="https://demenezes.dev/posts/filter-javascript-array/" rel="noopener noreferrer"&gt;método filter&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que você tem?
&lt;/h3&gt;

&lt;p&gt;Aqui, a resposta é mais óbvia ainda: &lt;strong&gt;uma array&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Se você quer um item de dentro de uma array, obviamente precisa ter uma array.&lt;/p&gt;

&lt;p&gt;Se você tiver algo que não é uma array, como um objeto, converta para uma array antes .&lt;/p&gt;

&lt;h3&gt;
  
  
  O item que você precisa é exatamente aquele dentro da array?
&lt;/h3&gt;

&lt;p&gt;A resposta precisa ser &lt;strong&gt;sim&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O método find não altera o item. Mas nada impede de você alterá-lo depois que o find terminar de executar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Callback
&lt;/h2&gt;

&lt;p&gt;Em resumo: é um &lt;code&gt;CTRL + F&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;O método find busca e retorna de dentro de uma array o primeiro valor que corresponde aos critérios que você definir. Se não encontrar, o retorno será &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;O find retorna sempre o primeiro item, mesmo que mais de um item atenda aos critérios. Se você precisar de mais de um item, use o &lt;a href="https://demenezes.dev/posts/filter-javascript-array/" rel="noopener noreferrer"&gt;método filter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Dentro da função callback você define os critérios e retorna um valor booleano. Se for &lt;code&gt;true&lt;/code&gt;, o find retorna aquele valor e finaliza a execução. Se for &lt;code&gt;false&lt;/code&gt;, avança para o próximo.&lt;/p&gt;

&lt;p&gt;Mesmo que você não retorne um booleano de forma explícita, o Javascript realiza a coerção de tipo para garantir isso.&lt;/p&gt;

&lt;p&gt;A função callback recebe até 3 parâmetros:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Item&lt;/strong&gt;: é o elemento da array daquela iteração&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Index&lt;/strong&gt;: é o índice daquele item, começa em 0 e aumenta em 1 a cada iteração&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Array&lt;/strong&gt;: seu valor é sempre a array que você está iterando&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Para saber que é o momento de usar o find, você precisa dar match com esses três requisitos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Você precisa pegar um item de dentro de uma array&lt;/li&gt;
&lt;li&gt;Você já tem essa array "em mãos"&lt;/li&gt;
&lt;li&gt;Você precisa daquele item original, sem alterações&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;O método find do Javascript, além do filter que já mencionei algumas vezes ao longo do post, é muito útil no dia a dia. E minha intenção aqui foi passar de forma direta a grande maioria das possibilidades com ele.&lt;/p&gt;

&lt;p&gt;Se esse conteúdo te ajudou, e você sente vontade de dizer um &lt;strong&gt;obrigado&lt;/strong&gt;, compartilhe nas redes sociais ou com algum amigo :) &lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;

</description>
      <category>find</category>
      <category>javascript</category>
      <category>array</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Domine o método Filter e simplifique sua lógica com arrays em Javascript</title>
      <dc:creator>deMenezes</dc:creator>
      <pubDate>Tue, 17 Oct 2023 11:38:44 +0000</pubDate>
      <link>https://dev.to/demenezes/domine-o-metodo-filter-e-simplifique-sua-logica-com-arrays-em-javascript-209b</link>
      <guid>https://dev.to/demenezes/domine-o-metodo-filter-e-simplifique-sua-logica-com-arrays-em-javascript-209b</guid>
      <description>&lt;h2&gt;
  
  
  Você já passou café? Então será fácil aprender a usar o método filter em Javascript para filtrar dados de uma array. Veja como:
&lt;/h2&gt;

&lt;p&gt;Você gosta de café?&lt;/p&gt;

&lt;p&gt;Se pelo menos já passou café alguma vez na vida, vai ser bem fácil de entender esse conteúdo. Isso porque o filtro do café faz a mesma coisa que o método filter em Javascript.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480402-o-processo-de-filtrar-agua-e-po-de-cafe-e-resultar-em-cafe.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480402-o-processo-de-filtrar-agua-e-po-de-cafe-e-resultar-em-cafe.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="o processo de filtrar água e pó de café e resultar em café" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você coloca dentro dele o pó de café e água. Ele segura o pó, e deixa a água passar.&lt;/p&gt;

&lt;p&gt;Fim.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O filter em Javascript recebe uma array de elementos e filtra ela&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ingredientes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pó de café&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;água&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cafePassado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ingredientes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ingrediente&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ingrediente&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;água&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cafePassado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ 'água' ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É claro que o resultado final não é apenas "água", e sim o café líquido. Mas entendeu né?&lt;/p&gt;

&lt;p&gt;Esse é o básico que você precisa saber, continue lendo para entender mais alguns detalhes do filter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estrutura do método filter em Javascript
&lt;/h2&gt;

&lt;p&gt;A estrutura desse método é muito parecida com a dos outros métodos de array.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ao chamar o filter, você informa uma função callback que executa uma vez a cada item da array&lt;/strong&gt;. No exemplo acima, a função callback é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ingrediente&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ingrediente&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;água&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Um ponto muito importante sobre a função callback é que ela deve retornar um valor booleano: &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt;. Esse retorno depende dos critérios que você quiser. No primeiro exemplo, o critério é &lt;em&gt;o item deve ser igual a 'água'&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Os itens que atenderem aos requisitos farão parte da nova array. Logo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se todos os itens retornarem &lt;code&gt;true&lt;/code&gt;, a nova array será idêntica à original, inclusive com a mesma quantidade de itens&lt;/li&gt;
&lt;li&gt;Se todos os itens retornarem &lt;code&gt;false&lt;/code&gt;, a nova array sempre será vazia &lt;code&gt;[]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Se houver pelo menos 1 &lt;code&gt;true&lt;/code&gt; e 1 &lt;code&gt;false&lt;/code&gt;, a nova array será menor que a array original, mas não vazia&lt;/li&gt;
&lt;li&gt;A nova array nunca será maior que a original&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Você percebeu que o &lt;code&gt;return&lt;/code&gt; é algo importante aqui, né? E existe outro detalhe sobre ele.&lt;/p&gt;

&lt;h2&gt;
  
  
  O return do filter sempre é um booleano
&lt;/h2&gt;

&lt;p&gt;Veja o exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ -3, -2, -1, 1, 2, 3 ];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No primeiro exemplo fica muito claro que o retorno é um booleano.&lt;/p&gt;

&lt;p&gt;Mas por que aqui eu retornei o próprio número? E por que a nova array tem todos os números menos o &lt;code&gt;0&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480440-3-2-1-0-1-2-3.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480440-3-2-1-0-1-2-3.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="representação gráfica do filtro de números" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O retorno deve ser booleano, mas você não precisa escrever &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt; explicitamente. &lt;strong&gt;Caso o valor não seja um booleano, o Javascript converte ele para poder decidir se insere o valor na nova array ou não&lt;/strong&gt;. Esse processo de conversão se chama &lt;a href="https://www.freecodecamp.org/portuguese/news/coercao-de-tipo-em-javascript-explicada/" rel="noopener noreferrer"&gt;coerção de tipo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Coerção de tipo é quando o Javascript precisa de um tipo de dado, porém você fornece outro tipo. Então ele faz a conversão para que tudo possa funcionar. Isso acontece com vários tipos de dados, e não apenas number ou booleano.&lt;/p&gt;

&lt;p&gt;Esse é um assunto complexo e longo, mas importante em Javascript. Recomendo que você estude em algum momento.&lt;/p&gt;

&lt;p&gt;Como o filter precisa retornar um booleano, ele converte o valor de number para boolean. Após a conversão, o filter segue com o trabalho.&lt;/p&gt;

&lt;p&gt;No exemplo acima da array de números, a linha &lt;code&gt;return number&lt;/code&gt; tem os seguintes valores:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mais uma pílula de conhecimento sobre coerção: o Javascript converte zero em &lt;code&gt;false&lt;/code&gt;, e os demais números em &lt;code&gt;true&lt;/code&gt;. E é por isso que a nova array contém todos os números, menos o &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;Se você não retornar nada, o resultados será uma array vazia.&lt;/p&gt;

&lt;p&gt;Por quê?&lt;/p&gt;

&lt;p&gt;Toda função retorna alguma coisa. Se você não retornar nada, a função retorna o valor padrão que é &lt;code&gt;undefined&lt;/code&gt;. Durante a coerção de tipo, &lt;code&gt;undefined&lt;/code&gt; vira &lt;code&gt;false&lt;/code&gt;, e como você já viu, isso gera uma nova array vazia.&lt;/p&gt;

&lt;p&gt;E se, enquanto decide que se insere o item na nova array, você quiser aplicar alguma alteração nele?&lt;/p&gt;

&lt;h2&gt;
  
  
  O filter não altera os itens da array
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;O filter apenas decide quais itens filtrar ou não&lt;/strong&gt;, o método não altera eles.&lt;/p&gt;

&lt;p&gt;Se você precisa alterar algum valor, precisará conectar o filter com outro método, como por exemplo o map:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ -6, -4, -2, 2, 4, 6 ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O último artigo aqui do blog foi sobre &lt;a href="https://demenezes.dev/posts/map-javascript-array/" rel="noopener noreferrer"&gt;como manipular arrays em Javascript com o map&lt;/a&gt;. Recomendo a leitura para uma compreensão mais completa.&lt;/p&gt;

&lt;p&gt;O código acima recebe a array de números &lt;code&gt;[ -3, -2, -1, 0, 1, 2, 3 ]&lt;/code&gt; e usa o filter para filtrar os números que são &lt;code&gt;true&lt;/code&gt;. Depois usa o map para multiplicar cada número restante por 2.&lt;/p&gt;

&lt;p&gt;Diferente do filter, o map não faz coerção, porque ele não exige que o retorno seja um booleano. Ele apenas insere o valor que você retornou na nova array.&lt;/p&gt;

&lt;p&gt;Agora conheça os três parâmetros da função callback do filter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Os parâmetros da função callback
&lt;/h2&gt;

&lt;p&gt;Essas são as ferramentas para trabalhar dentro do filter.&lt;/p&gt;

&lt;p&gt;As funções callback dos exemplos que dei até agora, receberam apenas 1 parâmetro. Esse parâmetro representa cada item da array original.&lt;/p&gt;

&lt;p&gt;Mas a função pode receber até 3 parâmetros, e você pode usar apenas aqueles que precisar.&lt;/p&gt;

&lt;p&gt;Vou usar uma array com informações frutas para dar exemplos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fruits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Maçã&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vermelha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;flavor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Doce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Redonda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;vitamins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Manga&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Amarela&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;flavor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Doce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Oval&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="na"&gt;vitamins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Banana&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Amarela&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;flavor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Doce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alongada&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;vitamins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;B6&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Laranja&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Laranja&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;flavor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cítrico&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Redonda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;vitamins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Uva&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Roxa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;flavor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Doce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Esfera&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;vitamins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pera&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Amarela&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;flavor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Doce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pêra&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="na"&gt;vitamins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Morango&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vermelha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;flavor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cítrico&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Esfera&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;vitamins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Abacaxi&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Amarela&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;flavor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cítrico&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Irregular&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;vitamins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;B6&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kiwi&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Verde&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;flavor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Agridoce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Oval&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="na"&gt;vitamins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cereja&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vermelha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;flavor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Doce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Esfera&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;vitamins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uma rápida explicação:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Essa é uma array de frutas&lt;/li&gt;
&lt;li&gt;Cada objeto contém as informações de uma fruta&lt;/li&gt;
&lt;li&gt;As informações são nome, cor, peso (em gramas), sabor, formato e uma array de vitaminas daquela fruta&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Veja agora exemplos com o primeiro parâmetro.&lt;/p&gt;

&lt;h3&gt;
  
  
  O parâmetro item
&lt;/h3&gt;

&lt;p&gt;Esse você já está careca de ver.&lt;/p&gt;

&lt;p&gt;O desafio aqui é: &lt;em&gt;filtrar apenas as frutas na cor "Vermelha"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480479-3-2-1-0-1-2-3-1.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480479-3-2-1-0-1-2-3-1.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="representação gráfica do filtro de cor vermelha" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para isso, a primeira coisa é descobrir a cor da fruta daquela iteração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora verifico se é a cor que desejo, e retorno &lt;code&gt;true&lt;/code&gt;, caso contrário retorno &lt;code&gt;false&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vermelha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E você verá que o resultado é "Maçã", "Morango" e "Cereja", ou seja, frutas vermelhas.&lt;/p&gt;

&lt;p&gt;Isso já resolve o desafio. Mas como dica adicional, é possível deixar esse código mais curto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vermelha&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As mudanças que fiz foram as seguintes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Troquei a declaração normal da função callback para &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions" rel="noopener noreferrer"&gt;arrow function&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Não criei a variável &lt;code&gt;color&lt;/code&gt;, em vez disso, usei o valor diretamente em &lt;code&gt;fruit.color&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Em vez de retornar um booleano diretamente, retornei &lt;code&gt;fruit.color === 'Vermelha'&lt;/code&gt;. Se essa comparação for verdadeira, o retorno será &lt;code&gt;true&lt;/code&gt;, senão, será &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;O código menor não necessariamente é melhor&lt;/strong&gt;. Porém conforme você se acostuma com alguns códigos, vai perceber que não precisa escrever um bloco tão grande. Daqui em diante vou escrever o código maior, mas fique à vontade para fazer como quiser.&lt;/p&gt;




&lt;p&gt;O segundo desafio é: &lt;em&gt;filtrar frutas de cor "Amarela", sabor "Doce" e que tenha vitamina K&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480499-3-2-1-0-1-2-3-2.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480499-3-2-1-0-1-2-3-2.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="representação gráfica do filtro de fruta amarela, sabor doce e com vitamina k" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você já aprendeu a adicionar uma condição, agora basta adicionar duas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vitamins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vitamins&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Amarela&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;vitamins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;K&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para verificar a cor, fiz igualzinho ao primeiro desafio. Para verificar as vitaminas, usei o método de array &lt;code&gt;includes&lt;/code&gt; que verifica se uma array tem um item.&lt;/p&gt;

&lt;p&gt;E o resultado será apenas o objeto da fruta "Pera".&lt;/p&gt;




&lt;p&gt;O terceiro e último desafio é: &lt;em&gt;filtrar frutas de cor "Azul"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480523-3-2-1-0-1-2-3-3.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480523-3-2-1-0-1-2-3-3.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="representação gráfica do filtro de frutas azuis" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ué?! Existe fruta azul? &lt;a href="https://www.google.com/search?q=existe+frita+azul%3F&amp;amp;rlz=1C1GCEU_pt-BRBR1015BR1015&amp;amp;oq=existe+frita+azul%3F&amp;amp;gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIICAEQABgNGB4yCggCEAAYBRgNGB4yCggDEAAYCBgNGB7SAQg0MzcwajBqN6gCALACAA&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8" rel="noopener noreferrer"&gt;Sim&lt;/a&gt;, mas não na array do desafio.&lt;/p&gt;

&lt;p&gt;O código você já sabe como é, porém esse desafio serve apenas para mostrar que o filter pode retornar uma array vazia:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Azul&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E o resultado é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O segundo parâmetro que você vai aprender é só um "numerozinho".&lt;/p&gt;

&lt;h3&gt;
  
  
  O parâmetro index
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Esse parâmetro é o índice do item da array&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ele inicia em 0 e aumenta em 1 a cada iteração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse código mostra no console o index de todos os itens. Como são 10 itens, vai de 0 a 9:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;
&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="mi"&gt;9&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O desafio é: &lt;em&gt;filtrar frutas com formato de "Esfera", desde que seu index seja par&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480548-3-2-1-0-1-2-3-4.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480548-3-2-1-0-1-2-3-4.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="representação gráfica de frutas no formato de esfera" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O código começa assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tenho em mãos agora o objeto &lt;code&gt;fruit&lt;/code&gt; com as informações da fruta, e seu index.&lt;/p&gt;

&lt;p&gt;Se eu fizer a operação &lt;code&gt;index % 2 === 0&lt;/code&gt; e o retorno for &lt;code&gt;0&lt;/code&gt;, significa que o número é par. Se retornar &lt;code&gt;1&lt;/code&gt;, o número é impar. Expliquei isso em detalhes no post sobre &lt;a href="https://demenezes.dev/posts/como-usar-foreach-javascript-exemplos/#o-par%C3%A2metro-index-da-funcao-callback" rel="noopener noreferrer"&gt;o método forEach em Javascript&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;O desafio propôs duas condições: em relação ao formato e o index par. Veja como isso fica no código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;format&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;format&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isEven&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;format&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Oval&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;isEven&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado será uma array apenas a fruta "Kiwi". A fruta "Manga" também faria parte, caso não houvesse a condição do index par.&lt;/p&gt;

&lt;p&gt;Veja agora o último parâmetro da função callback.&lt;/p&gt;

&lt;h3&gt;
  
  
  O parâmetro array
&lt;/h3&gt;

&lt;p&gt;Esse é o único parâmetro que não varia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ele sempre retorna a array original&lt;/strong&gt;. Nos exemplos desse post, esse parâmetro é a array &lt;code&gt;fruits&lt;/code&gt;, com as informações de &lt;a href="https://www.google.com/search?gs_ssp=eJzj4tLP1TcwKswrLjIwYHRg8OIpKS0pyVRIKwJRAHcqCPU&amp;amp;q=tutti+frutti&amp;amp;rlz=1C1GCEU_pt-BRBR1015BR1015&amp;amp;oq=tutti&amp;amp;gs_lcrp=EgZjaHJvbWUqCggBEC4YsQMYgAQyDwgAEEUYORiDARixAxiABDIKCAEQLhixAxiABDIHCAIQABiABDITCAMQLhiDARivARjHARixAxiKBTIHCAQQABiABDIKCAUQABixAxiABDIKCAYQABixAxiABDIHCAcQABiABDITCAgQLhiDARivARjHARixAxiKBTIHCAkQABiABNIBCDI2ODlqMGo3qAIAsAIA&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8" rel="noopener noreferrer"&gt;todas as frutas&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Esse recurso é bom para quando você precisa de alguma informação da array para decidir se insere o item na nova array.&lt;/p&gt;

&lt;p&gt;O primeiro desafio é um exemplo desse uso: &lt;em&gt;filtrar frutas as quais seu formato só apareça 1 vez na lista toda, independente de qual seja esse formato&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480580-3-2-1-0-1-2-3-5.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480580-3-2-1-0-1-2-3-5.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="representação gráfica do filtro de frutas em formato único" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como descobrir se um formato só existe uma vez na lista?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;format&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;format&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;formatQuantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;format&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;format&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;formatQuantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;formatQuantity&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`O formato &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;format&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; existe &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;formatQuantity&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; vezes na lista`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse código vai te mostrar quantas vezes cada formato se repete na array. E assim será possível ver que apenas os formatos "Alongada", "Pera" e "Irregular" aparecem só uma vez. As outras aparecem duas ou três vezes. Assim você começa a ter uma noção do resultado final.&lt;/p&gt;

&lt;p&gt;Agora vou remover os consoles e adicionar o &lt;code&gt;return&lt;/code&gt; que não pode faltar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;format&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;format&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;formatQuantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;format&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;format&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;formatQuantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;formatQuantity&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formatQuantity&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As frutas que o filter adicionou na array final foram:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Banana: formato "Alongada"&lt;/li&gt;
&lt;li&gt;Pera: formato "Pera"&lt;/li&gt;
&lt;li&gt;Abacaxi: formato "Irregular"&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Agora, o último desafio desse artigo, vamos lá: &lt;em&gt;filtrar frutas com mais de 150 gramas, e que essa fruta esteja na primeira metade da lista&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480603-3-2-1-0-1-2-3-6.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1697480603-3-2-1-0-1-2-3-6.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="representação gráfica do filtro de frutas com mais de 150 gramas na primeira metade da lista" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para resolver isso, você vai precisar usar todos os parâmetros da array.&lt;/p&gt;

&lt;p&gt;Vou começar com a informação do peso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E como descubro se a fruta está na primeira metade da lista: pelo index.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstHalf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A variável &lt;code&gt;firstHalf&lt;/code&gt; informa se o item faz parte da primeira metade. Ele verifica se o tamanho da array dividido por 2 (ou seja, sua metade) é maior que o index + 1. O &lt;code&gt;+ 1&lt;/code&gt; serve para ajustar o índice, já que ele inicia em zero.&lt;/p&gt;

&lt;p&gt;Existem alguns problemas nesse código, como arrays com quantidade impar de itens. Por exemplo: em uma array de 9 itens, o quinto item faz parte da primeira ou segunda metade? Mas esse não é o foco desse artigo, então ignore isso.&lt;/p&gt;

&lt;p&gt;O código final fica assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstHalf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;weight&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;firstHalf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E o resultado será "Manga" e "Laranja". Se não existisse o critério de estar na primeira metade da lista, você também veria "Pera" e "Abacaxi".&lt;/p&gt;

&lt;p&gt;Mas apenas explicar como o filter funciona não basta, você precisa saber quando usar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como saber se preciso usar o filter
&lt;/h2&gt;

&lt;p&gt;Mesmo que você tenha entendido tudo, é importante perceber o momento de chamar o filter no seu dia a dia.&lt;/p&gt;

&lt;p&gt;Então criei uma linha raciocínio que você pode seguir.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do que você precisa?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Se a resposta for uma array, o filter é um grande candidato&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Isso porque o que o filter retorna é uma array.&lt;/p&gt;

&lt;p&gt;Caso você precise de apenas 1 item de dentro da array, o filter não é o melhor método, mas também serve. Veja um exemplo para pegar todas as frutas chamadas "Abacaxi":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fruits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Abacaxi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;// Informações do abacaxi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O "problema" é que esse código retorna uma array com apenas um item, as informações do abacaxi. E para acessá-las você vai precisar usar a notação de colchetes &lt;code&gt;[0]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Quando você precisa pegar apenas 1 item de dentro da array, a melhor forma é usar o método find. Mas isso fica para outro post.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qual a quantidade de itens que quero na nova array?
&lt;/h3&gt;

&lt;p&gt;Para que o filter seja uma opção, as respostas a essa pergunta devem ser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Igual à array original&lt;/li&gt;
&lt;li&gt;Menor que a array original&lt;/li&gt;
&lt;li&gt;Aceito uma array vazia&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E nunca pode ser: maior que a array original.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que você tem?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Se a resposta também for uma array, o filter ganha mais força&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Isso porque como você pode ver na &lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filter" rel="noopener noreferrer"&gt;MDN, o filter é um método de array&lt;/a&gt;. Não é possível usar ele com objeto ou string, por exemplo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cada item na nova array é um clone dele na array original?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Se a resposta for sim&lt;/strong&gt;, pode usar o filter à vontade.&lt;/p&gt;

&lt;p&gt;Como falei no começo do artigo, o filter não altera os itens que ele itera. Ele apenas decide se insere o item ou não. Logo, os itens são clones deles na array original.&lt;/p&gt;

&lt;p&gt;Lembre-se que, apesar do filter não alterar nada, você pode conectar ele com um map e "fazer chover" com o Javascript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Callback
&lt;/h2&gt;

&lt;p&gt;O método filter em Javascript funciona como um filtro de café.&lt;/p&gt;

&lt;p&gt;Ele filtra uma array e retorna uma lista apenas com os itens que atendem aos requisitos que você definiu.&lt;/p&gt;

&lt;p&gt;Ele recebe como parâmetro uma função callback, e o retorno dessa função define se o item fará parte da nova array (&lt;code&gt;true&lt;/code&gt;) ou não (&lt;code&gt;false&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Se você não retornar um booleano, o Javascript faz uma conversão do valor para esse tipo, a conhecida coerção de tipo. Se você não retornar nada, é como se retornasse &lt;code&gt;undefined&lt;/code&gt;, ou &lt;code&gt;false&lt;/code&gt;, e a nova array ficará vazia.&lt;/p&gt;

&lt;p&gt;Ela sempre será:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Idêntica à original&lt;/li&gt;
&lt;li&gt;Com menos itens, inclusive zero&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O filter não altera os elementos individualmente, apenas decide se insere eles ou não na nova lista. Você pode alterá-los ao conectar o filter com o método map.&lt;/p&gt;

&lt;p&gt;A função callback recebe 3 parâmetros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Item: o próprio elemento da array naquela iteração&lt;/li&gt;
&lt;li&gt;Index: um valor que inicia em 0 e aumenta de 1 em 1&lt;/li&gt;
&lt;li&gt;Array: a própria array que você está iterando&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para saber se você precisa usar o filter, siga a seguinte linha de raciocínio:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eu preciso de uma array&lt;/li&gt;
&lt;li&gt;A quantidade de itens dessa array deve ser igual ou menor que a original&lt;/li&gt;
&lt;li&gt;Tenho uma array em mãos&lt;/li&gt;
&lt;li&gt;Cada item na array nova é um clone dela na array original&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seguindo esses passos, rapidamente você terá domínio do método filter.&lt;/p&gt;

&lt;p&gt;Ele é extremamente útil no dia a dia. E conforme você pratica, fica mais fácil e legal de usá-lo.&lt;/p&gt;

&lt;p&gt;Não tenho dúvida de que aprender o filter tornou meu código mais fácil de ler e direto ao ponto em vários aspectos. E espero que a compreensão do conteúdo possa fazer isso com o seu código também.&lt;/p&gt;

&lt;p&gt;Se ficou alguma dúvida, deixe um comentário que será um prazer responder.&lt;/p&gt;

&lt;p&gt;E se esse conteúdo te ajudou e você gostaria de dizer um &lt;strong&gt;obrigado&lt;/strong&gt;, compartilhe esse conteúdo nas redes sociais ou mande para um amigo que precise 🤗.&lt;/p&gt;

&lt;p&gt;Até a próxima!&lt;/p&gt;




&lt;p&gt;Continue estudando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filter" rel="noopener noreferrer"&gt;https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.freecodecamp.org/portuguese/news/coercao-de-tipo-em-javascript-explicada/" rel="noopener noreferrer"&gt;https://www.freecodecamp.org/portuguese/news/coercao-de-tipo-em-javascript-explicada/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filter" rel="noopener noreferrer"&gt;https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>filter</category>
      <category>javascript</category>
      <category>array</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Transforme arrays em ouro: aprenda a manipular dados com o map() em Javascript</title>
      <dc:creator>deMenezes</dc:creator>
      <pubDate>Mon, 09 Oct 2023 11:21:13 +0000</pubDate>
      <link>https://dev.to/demenezes/transforme-arrays-em-ouro-aprenda-a-manipular-dados-com-o-map-em-javascript-4g60</link>
      <guid>https://dev.to/demenezes/transforme-arrays-em-ouro-aprenda-a-manipular-dados-com-o-map-em-javascript-4g60</guid>
      <description>&lt;h2&gt;
  
  
  Descubra como usar o map() em Javascript. Manipule arrays e transforme dados com esse método essencial para qualquer pessoa desenvolvedora.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;O map é um método Javascript que cria uma array a partir de outra, sem alterar a original&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Fim.&lt;/p&gt;

&lt;p&gt;Isso é tudo que você precisa saber. Daqui em diante o que você vai ler é apenas essa explicação inicial em detalhes.&lt;/p&gt;

&lt;p&gt;Veja como gerar uma array de strings em caixa alta, a partir de outra em caixa baixa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lowercaseNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;goku&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bulma&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kuririn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uppercaseNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lowercaseNames&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;uppercaseNames&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ 'GOKU', 'BULMA', 'KURIRIN' ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E agora, como gerar uma array com o dobro dos números da array original:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;double&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;double&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ 10, 16, 6, 12, 14, 4, 10 ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sempre explico alguns termos da programação aqui no blog com a tradução dos comandos.&lt;/p&gt;

&lt;p&gt;Mas que diabos é "mapear"?&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que "map"?
&lt;/h2&gt;

&lt;p&gt;"Mapear" é como &lt;em&gt;criar um mapa que represente algo&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Veja um exemplo. O mapa do Brasil mostra todos os estados e o Distrito Federal. O desenho de cada estado no papel &lt;em&gt;representa&lt;/em&gt; aquela região física no Brasil. É como se o mapa fosse uma lista de itens (estados), e cada um deles apontasse para outra coisa em outro lugar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O desenho do estado do Rio Grande do Sul no mapa &lt;em&gt;representa&lt;/em&gt; a região do Rio Grande do Sul na vida real&lt;/li&gt;
&lt;li&gt;O desenho do estado de Santa Catarina no mapa &lt;em&gt;representa&lt;/em&gt; a região de Santa Catarina na vida real&lt;/li&gt;
&lt;li&gt;O desenho do estado do Paraná no mapa &lt;em&gt;representa&lt;/em&gt; a região do Paraná na vida real&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A região física do país Brasil &lt;em&gt;gera&lt;/em&gt; um mapa (desenho em um papel) para representar ela.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1696506831-o-mapa-da-regiao-sul-do-brasil-onde-cada-estado-aponta-para-aquela-regiao-fisica-na-vida-real.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1696506831-o-mapa-da-regiao-sul-do-brasil-onde-cada-estado-aponta-para-aquela-regiao-fisica-na-vida-real.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="o mapa da região sul do brasil, onde cada estado aponta para aquela região física na vida real" width="800" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O mesmo acontece com um livro. Se você dividir todo o seu conteúdo em uma lista de capítulos, é possível &lt;em&gt;gerar&lt;/em&gt; um mapa com o nome do capítulo e a página onde ele começa. Esse mapa se chama sumário.&lt;/p&gt;

&lt;p&gt;Isso significa que cada item do sumário &lt;em&gt;representa&lt;/em&gt; um capítulo do livro.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1696506854-um-sumario-e-uma-seta-apontando-para-um-livro.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1696506854-um-sumario-e-uma-seta-apontando-para-um-livro.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="um sumário e uma seta apontando para um livro" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E isso é bem parecido com o que o map do Javascript faz. Ele usa uma array original (a região do país ou os capítulos do livro) para &lt;em&gt;gerar&lt;/em&gt; uma nova array (o mapa ou o sumário).&lt;/p&gt;

&lt;p&gt;Importante: esses exemplos são só exemplos. Você pode considerar o mapa do Brasil como um &lt;em&gt;resumo&lt;/em&gt; da região do país Brasil. Pode ver o sumário como um &lt;em&gt;resumo&lt;/em&gt; dos capítulos de um livro. Mas o map não gera uma "array resumida", ignore esse ponto.&lt;/p&gt;

&lt;p&gt;Agora você já sabe o que o map faz: &lt;strong&gt;cria uma array a partir de outra, sem alterar a original&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;E o que o map não faz?&lt;/p&gt;

&lt;h2&gt;
  
  
  O map faz um clone ou transforma uma array?
&lt;/h2&gt;

&lt;p&gt;Tecnicamente não!&lt;/p&gt;

&lt;p&gt;Não é certo afirmar que ele faz um clone, porque a intenção não é criar outra array igual, apesar de isso ser possível.&lt;/p&gt;

&lt;p&gt;Também não posso dizer que o map &lt;em&gt;transforma&lt;/em&gt; uma array em outra, pois ele não altera a original. Isso é a &lt;strong&gt;imutabilidade&lt;/strong&gt;, um dos pilares da &lt;strong&gt;programação funcional.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Você pode modificar (ou não) cada item da lista ao colocá-la na nova. Como característica, o map sempre gera uma array com a mesma quantidade de itens que a original. Se você quer criar uma array com menos itens, precisará usar o método filter, mas isso fica para outro artigo.&lt;/p&gt;

&lt;p&gt;Agora vamos para a prática.&lt;/p&gt;

&lt;h2&gt;
  
  
  Veja como fazer o seu primeiro map
&lt;/h2&gt;

&lt;p&gt;Você se lembra do exemplo que dei no início do post?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lowercaseNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;goku&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bulma&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kuririn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uppercaseNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lowercaseNames&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;uppercaseNames&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ 'GOKU', 'BULMA', 'KURIRIN' ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Primeiro, criei uma array com vários nomes em caixa baixa (lowercase). Depois, usei o &lt;code&gt;lowercaseNames.map(...)&lt;/code&gt; para gerar a nova array, e o resultado disso coloquei na &lt;code&gt;const uppercaseNames&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;O map recebe como argumento uma função callback. Declarei essa função assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa função callback vai:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Executar uma vez para cada item da array original&lt;/li&gt;
&lt;li&gt;Realizar uma operação com esse item. No caso, transformar em caixa alta com o método de string  &lt;code&gt;.toUpperCase()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;E colocar o resultado na array nova através do &lt;code&gt;return&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Abaixo veja o passo a passo de como isso acontece:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Antes de começar:

- Array original: [ 'goku', 'bulma', 'kuririn' ]
- Array final: []

Primeira iteração:

- Valor original: 'goku'
- Valor retornado: 'GOKU'
- Array final: [ 'GOKU' ]

Segunda iteração:

- Valor original: 'bulma'
- Valor retornado: 'BULMA'
- Array final: [ 'GOKU', 'BULMA' ]

Terceira iteração:

- Valor original: 'kuririn'
- Valor retornado: 'KURIRIN'
- Array final: [ 'GOKU', 'BULMA', 'KURIRIN' ]

Resultado final do map:

- [ 'GOKU', 'BULMA', 'KURIRIN' ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assim, cada iteração retorna um valor que vai montando a array final.&lt;/p&gt;

&lt;p&gt;Mas será que você é obrigado a declarar esse &lt;code&gt;return&lt;/code&gt;?&lt;/p&gt;

&lt;h2&gt;
  
  
  A palavra return dentro do map
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;"E sE eU nÃo CoLoCaR &lt;code&gt;rEtUrN&lt;/code&gt;?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Você deveria hehe pois é assim que o map funciona&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Se você não leu um dos últimos posts aqui do blog, eu contei uma história com exemplos de como usar o &lt;a href="https://demenezes.dev/posts/como-usar-foreach-javascript-exemplos/#o-que-o-foreach-retorna" rel="noopener noreferrer"&gt;forEach&lt;/a&gt;. Lá eu expliquei que toda função retorna alguma coisa. E quando você não define qual é, a função retorna &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Então respondendo à pergunta, se o map não retorna nada, ele formará a nova array apenas com &lt;code&gt;undefined&lt;/code&gt;. E imagino que não seja essa sua intenção:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lowercaseNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;goku&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bulma&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kuririn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uppercaseNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lowercaseNames&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// sem return&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;uppercaseNames&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [ undefined, undefined, undefined ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O map precisa de um retorno, mas não necessariamente da palavra &lt;code&gt;return&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Você pode usar uma &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions" rel="noopener noreferrer"&gt;arrow function&lt;/a&gt; e escrever o mesmo código de exemplo assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uppercaseNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lowercaseNames&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Veja agora mais exemplos com o map, bastante comuns no meio corporativo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Oi, eu sou o Goku!
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/xbJB71BBfKA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;"Exemplo do mundo corporativo" apenas se você trabalhar com o Akira Toriyama.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1653006346-tim-mossholder-imld5dbclm4-unsplash-1.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1653006346-tim-mossholder-imld5dbclm4-unsplash-1.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="Escrita " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mesmo assim, espero que isso ajuda você a entender o funcionamento do map em Javascript.&lt;/p&gt;

&lt;p&gt;Abaixo, você vai ver uma array com os personagens de Dragon Ball e suas raças:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Goku&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;saiyajin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;     &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cell&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;android&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;      &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kuririn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bulma&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vegeta&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;saiyajin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;     &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mestre Kame&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kami-Sama&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;namekuseijin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A partir de agora, vou mostrar 3 formas de usar o map em Javascript com essa array. Em cada uma delas, vou adicionar um parâmetro a mais, para aumentar o nível de complexidade aos poucos.&lt;/p&gt;

&lt;h2&gt;
  
  
  O primeiro parâmetro do map: item
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ele representa cada item da array original&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Você pode chamar os parâmetros como quiser, mas dar bons nomes para as coisas ajuda demais. Costumo chamá-lo &lt;code&gt;item&lt;/code&gt;, algo bem genérico, quando não sei o que tem na array. No primeiro exemplo do post eu usei &lt;code&gt;name&lt;/code&gt; ou &lt;code&gt;number&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Aqui, vou chamar de &lt;code&gt;character&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vou mudar o nome dos personagens para caixa alta. Mas não de todos eles, e sim &lt;em&gt;apenas dos personagens terráqueos&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Para isso, preciso descobrir a raça de cada personagem antes através do &lt;code&gt;character.race&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// mudar o nome para caixa alta&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// retornar dados originais&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;  
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora é preciso dar atenção a três pontos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Não esquecer do &lt;code&gt;return&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Colocar o nome em caixa alta&lt;/li&gt;
&lt;li&gt;Caso não seja terráqueo, retornar as informações originais&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;O &lt;code&gt;if&lt;/code&gt; terá um &lt;code&gt;return&lt;/code&gt;, e o &lt;code&gt;else&lt;/code&gt; terá outro, porque o valor que quero retornar depende da raça. Cada um deles retorna um objeto com as novas informações do personagem. Por enquanto, vou deixar esses objetos iguais para você entender passo a passo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;  
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como quero alterar o nome dos terráqueos, dentro do &lt;code&gt;if&lt;/code&gt; eu adiciono o &lt;code&gt;.toUpperCase()&lt;/code&gt; no nome, e não altero a raça:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;  
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dentro do &lt;code&gt;else&lt;/code&gt;, o objeto que eu retornei é exatamente igual ao que recebi. Então posso simplificar apenas com &lt;code&gt;return character&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se eu remover o else, tornar a função callback em uma arrow function e tirar as chaves do &lt;code&gt;if&lt;/code&gt;, posso simplificar mais ainda:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simplificar código é um vício, mas estou me tratando (mentira).&lt;/p&gt;

&lt;p&gt;Como o map alterou apenas os nomes de Kuririn, Bulma e Mestre Kame, o resultado é esse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Goku&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;saiyajin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cell&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;android&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;KURIRIN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BULMA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vegeta&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;saiyajin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MESTRE KAME&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kami-Sama&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;namekuseijin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Veja agora um exemplo com mais um parâmetro do map.&lt;/p&gt;

&lt;h2&gt;
  
  
  O segundo parâmetro do map: index
&lt;/h2&gt;

&lt;p&gt;Veja esse código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perceba que surgiu o parâmetro &lt;code&gt;index&lt;/code&gt;. &lt;strong&gt;Essa variável inicia em zero, e aumenta em 1 a cada iteração do loop&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O código acima não é útil para nada, além de compreender o &lt;code&gt;index&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O último index é igual à quantidade de itens do array menos 1. Se a array tem 9 itens, o index vai de 0 a 8 (9 - 1 = 8).&lt;/p&gt;

&lt;p&gt;Ok, e agora? O que faço eu da vida?&lt;/p&gt;

&lt;p&gt;Parafraseando Tropa de Elite 2, o desafio agora é outro. &lt;em&gt;Quero adicionar em cada personagem uma nova propriedade que informa se seu &lt;code&gt;index&lt;/code&gt; é par ou impar&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Vou explicar por partes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;é par&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;é impar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso você não conheça essa técnica, para descobrir se um número é par ou impar, você precisa fazer a operação módulo com o número 2. Se o resultado for zero, ele é par. Se for 1, ele é impar. Expliquei em detalhes nesse capítulo do post anterior sobre &lt;a href="https://demenezes.dev/posts/como-usar-foreach-javascript-exemplos/#o-par%C3%A2metro-index-da-funcao-callback" rel="noopener noreferrer"&gt;forEach&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;E o resultado é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;é par&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;é impar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;é par&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;é impar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;é par&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;é Impar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;é par&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;é impar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;é par&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então agora posso fazer a mesma coisa de antes, vou retornar um valor diferente dependendo do &lt;code&gt;index&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;evenOrOdd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;par&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;evenOrOdd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;impar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vou simplificar o código novamente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;evenOrOdd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;par&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;impar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usei uma arrow function que retorna diretamente as informações do personagem. A linha &lt;code&gt;...character&lt;/code&gt; usa o &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax" rel="noopener noreferrer"&gt;operador Spread&lt;/a&gt; para "espalhar" as informações originais do objeto que recebi. E na linha seguinte apenas adiciono o valor de &lt;code&gt;evenOrOdd&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;E o resultado fica assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Goku&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;saiyajin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;evenOrOdd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;par&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cell&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;android&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;evenOrOdd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;impar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kuririn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;evenOrOdd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;par&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bulma&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;evenOrOdd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;impar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vegeta&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;saiyajin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;evenOrOdd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;par&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mestre Kame&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;evenOrOdd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;impar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kami-Sama&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;namekuseijin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;evenOrOdd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;par&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ficou com alguma dúvida? Volte e execute os códigos acima com alguns &lt;code&gt;consoles&lt;/code&gt;, para entender o que acontece em cada linha.&lt;/p&gt;

&lt;p&gt;Agora mais um exemplo com o último parâmetro do map.&lt;/p&gt;

&lt;h2&gt;
  
  
  O terceiro parâmetro do map: array
&lt;/h2&gt;

&lt;p&gt;O único parâmetro estático.&lt;/p&gt;

&lt;p&gt;Diferente os parâmetros anteriores, esse não muda a cada iteração. &lt;strong&gt;Ele sempre retorna a array original que você está percorrendo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Não recomendo você usar esse parâmetro para alterar a array dentro do map, e sim consultá-la para fazer outra operação.&lt;/p&gt;

&lt;p&gt;O desafio agora é: &lt;em&gt;caso o personagem seja o único daquela raça dentro da array, insira a string &lt;code&gt;Super&lt;/code&gt; antes do seu nome&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;É possível ver que apenas as raças &lt;em&gt;Android&lt;/em&gt; e &lt;em&gt;Namekuseijin&lt;/em&gt; possuem um único personagem. Então já dá para ter uma noção de como ficará o resultado.&lt;/p&gt;

&lt;p&gt;O código vai começar como nos outros exemplos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A primeira coisa a fazer é descobrir a raça de um personagem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora: como descobrir quantos personagens existem na array com essa raça?&lt;/p&gt;

&lt;p&gt;Isso poderia ser feito com outros métodos específicos, como o &lt;code&gt;reduce&lt;/code&gt;. Mas vou mostrar de forma mais imperativa, para simplificar, pois esse não é o objetivo principal. No futuro farei um post para explicar ele em mais detalhes.&lt;/p&gt;

&lt;p&gt;Quero alterar apenas nomes de personagens com raças únicas. Logo, a raça de cada personagem do loop deve aparecer na array apenas 1 vez (lembre disso). Ou seja, haverá uma verificação &lt;code&gt;algumValor === 1&lt;/code&gt;.&lt;br&gt;Então vou criar uma variável para contar quantas vezes essa raça aparece:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;raceQuantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Obviamente ela começa com o valor 0.&lt;/p&gt;

&lt;p&gt;Depois vou usar o forloop para percorrer a array, e adicionar 1 a essa variável, sempre que encontrar outra raça igual:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;raceQuantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;race&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;raceQuantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;raceQuantity&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A variável &lt;code&gt;raceQuantity&lt;/code&gt; nunca será 0, porque sempre existirá pelo menos um personagem daquela raça na array.&lt;/p&gt;

&lt;p&gt;Então eu verifico se essa variável é igual a 1 (lembrou?), ou seja, aquela raça aparece apenas uma vez na array. Então, adiciono o &lt;code&gt;'Super '&lt;/code&gt; antes do nome. Caso contrário, apenas retorno os dados originais do personagem.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;raceQuantity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;race&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;raceQuantity&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;raceQuantity&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Super &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;race&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;character&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E o resultado é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Goku&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;saiyajin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Super Cell&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;android&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kuririn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bulma&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Vegeta&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;saiyajin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mestre Kame&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terráqueo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Super Kami-Sama&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;race&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;namekuseijin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Longe de mim dizer que, agora, você já sabe tudo sobre o método map em Javascript. Mas arrisco dizer que agora você consegue resolver pelo menos 90% dos problemas desse tipo.&lt;/p&gt;

&lt;p&gt;Legal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agora você fecha essa aba do seu navegador...&lt;/li&gt;
&lt;li&gt;Vai fazer outra coisa...&lt;/li&gt;
&lt;li&gt;Dorme...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E amanhã encontra um problema qualquer, sem saber que o map é a solução. Então agora quero mostrar como descobrir se o map é a ferramenta certa para o seu problema.&lt;/p&gt;

&lt;h2&gt;
  
  
  Em quais situações você vai precisar usar o map
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1696506890-um-menino-com-um-mapa-na-mao.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1696506890-um-menino-com-um-mapa-na-mao.jpg%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="um menino com um mapa na mão" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Não adianta de nada ter um martelo e não saber que, além de pregar, ele também serve para remover pregos. Da mesma forma, não adianta saber toda teoria que expliquei, se no dia a dia você não sabe quando usar. Então quero mostrar como eu penso para concluir que devo usar o método map.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que eu quero (output)?
&lt;/h3&gt;

&lt;p&gt;Se o que eu quero for uma array, o map está entre as ferramentas possíveis.&lt;/p&gt;

&lt;p&gt;Isso porque &lt;strong&gt;o que o map te dá (o retorno ou resultado dele) é uma array&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Se você precisa de algo que não é uma array, esqueça o map.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que eu tenho (input)?
&lt;/h3&gt;

&lt;p&gt;O que tenho em mãos para gerar uma array?&lt;/p&gt;

&lt;p&gt;Se a resposta for &lt;em&gt;"eu tenho uma array"&lt;/em&gt;, sim, o map está novamente entre as opções.&lt;/p&gt;

&lt;p&gt;Lembre-se: ele gera uma array a partir de outra. Se você tem uma string ou objeto, vai precisar primeiro converter isso em uma array.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qual a quantidade de itens da nova array?
&lt;/h3&gt;

&lt;p&gt;A resposta sempre deve ser &lt;strong&gt;a mesma quantidade de itens da array original&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Conforme comentei no começo do artigo, o map gera uma array com a mesma quantidade de itens da original. Se a quantidade for maior ou menor, descarte o uso do map. Nesse caso, procure pelo &lt;code&gt;filter&lt;/code&gt;, &lt;code&gt;reduce&lt;/code&gt; ou até o &lt;code&gt;find&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  É possível fazer um mapeamento ou apontamento?
&lt;/h3&gt;

&lt;p&gt;É possível que cada item da minha array atual represente algo na nova array?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Se os dados das duas arrays (a original e a nova) estão relacionados, é possível fazer esse mapeamento&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Um exemplo possível seria pegar uma array de nomes completos, e retornar uma array apenas com os últimos sobrenomes.&lt;/p&gt;

&lt;p&gt;Um exemplo impossível seria puxar uma array de produtos do banco de dados, e gerar uma array de clientes que já compraram esse produto. Isso porque cada produto não aponta para apenas um cliente, esses dados são entidades diferentes.&lt;/p&gt;

&lt;p&gt;Com esse pensamento, acredito que rapidinho você vai descobrir quando usar o map de forma automática. Hoje em dia ainda penso nesses tópicos, eles nunca me abandonaram.&lt;/p&gt;

&lt;h2&gt;
  
  
  Callback
&lt;/h2&gt;

&lt;p&gt;O método map em Javascript cria uma array a partir de outra, sem alterar a original.&lt;/p&gt;

&lt;p&gt;Você pode por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criar uma array de strings em caixa alta a partir de outra em caixa baixa&lt;/li&gt;
&lt;li&gt;Criar uma array de números resultados de uma operação com os números de outra array&lt;/li&gt;
&lt;li&gt;Etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A palavra "map" foi escolhida para esse comando, porque o que ele faz é um mapeamento. Ou seja, cria uma lista de itens onde cada um deles represente um item na lista original.&lt;/p&gt;

&lt;p&gt;O map não clona nem transforma nada, ele cria uma array a partir de outra.&lt;/p&gt;

&lt;p&gt;É obrigatório retornar um valor dentro da função callback. Caso contrário, o seu map irá te devolver uma lista de &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;O primeiro parâmetro da função callback é o item da array original, e ele altera a cada loop.&lt;/p&gt;

&lt;p&gt;O segundo parâmetro da função callback é o index. Ele inicia em 0 e aumenta em 1 a cada loop.&lt;/p&gt;

&lt;p&gt;O terceiro parâmetro da função callback é a própria array original. Use ela apenas como consulta, não para alterá-la.&lt;/p&gt;

&lt;p&gt;Quando se ver em um problema no código, use o raciocínio que mostrei no final:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se o que você quer é uma array&lt;/li&gt;
&lt;li&gt;Se o que você tem é uma array&lt;/li&gt;
&lt;li&gt;Se elas têm a mesma quantidade de itens&lt;/li&gt;
&lt;li&gt;E se existe uma relação/pareamento entre os dados delas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Provavelmente o map vai resolver o seu problema.&lt;/p&gt;

&lt;p&gt;Mais uma vez posso dizer aliviado: eu gostaria MUITO de ter lido uma explicação assim quando comecei a estudar Javascript. Espero ter explicado da melhor forma para você esse tipo de conteúdo.&lt;/p&gt;

&lt;p&gt;Caso algo não tenha ficado claro, deixe nos comentários que será o maior prazer te responder.&lt;/p&gt;

&lt;p&gt;Obrigado pela sua leitura 😄 um abraço.&lt;/p&gt;




&lt;p&gt;Continue estudando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>map</category>
      <category>javascript</category>
      <category>array</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Codecon Summit 2023: minha primeira Codecon presencial</title>
      <dc:creator>deMenezes</dc:creator>
      <pubDate>Wed, 13 Sep 2023 11:21:04 +0000</pubDate>
      <link>https://dev.to/demenezes/codecon-summit-2023-minha-primeira-codecon-presencial-48ln</link>
      <guid>https://dev.to/demenezes/codecon-summit-2023-minha-primeira-codecon-presencial-48ln</guid>
      <description>&lt;h2&gt;
  
  
  Veja o que rolou na Codecon Summit 2023, um evento presencial em Joinville Santa Catarina
&lt;/h2&gt;

&lt;p&gt;A Codecon Summit 2023 presencial foi um grande evento.&lt;/p&gt;

&lt;p&gt;Ainda esse ano, eu estive presente na &lt;a href="https://demenezes.dev/posts/codecon-online-2023/" rel="noopener noreferrer"&gt;Codecon Digital&lt;/a&gt;, que foi um evento online.&lt;/p&gt;

&lt;p&gt;Agora, veja tudo que rolou de conteúdos e palestras na edição presencial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Elton Minetto em: developer productivity
&lt;/h2&gt;

&lt;p&gt;Elton Minetto comemorou recentemente os 20 anos do seu &lt;a href="https://eltonminetto.dev/" rel="noopener noreferrer"&gt;blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ele falou sobre produtividade para devs muito além dos atalhos de teclado e snippets de código.&lt;/p&gt;

&lt;p&gt;Ele sugeriu a criação de um histórico com datas de tudo que você fez no trabalho. Já ouvi essa dica algumas vezes de pessoas diferentes, e tento aplicar isso de uns meses para cá.&lt;/p&gt;

&lt;p&gt;Sobre os momentos de estudo, Elton falou sobre bloquear períodos na sua agenda para estudar ou ler livros. Esses períodos em geral são do tipo "só me chama se algo pegar fogo".&lt;/p&gt;

&lt;h2&gt;
  
  
  Carolina Pascale Campos e Osvaldo Santana em: processos ruins e dívidas técnicas
&lt;/h2&gt;

&lt;p&gt;Segundo o Google, código ruim induz à baixa qualidade de código. E consequentemente induz à baixa produtividade.&lt;/p&gt;

&lt;p&gt;Carolina e Osvaldo definiram código legado como código sem teste ou código difícil de criar testes.&lt;/p&gt;

&lt;p&gt;Outro ponto importante foi sobre reunião post mortem. Essas reuniões são feitas após solucionar um grande problema. O objetivo delas é encontrar soluções (e não culpados) e melhoria de processo.&lt;/p&gt;

&lt;p&gt;Como você faz revisão de código no seu time?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se alguém mais experiente faz a revisão de código, ela serve para evitar bugs em produção&lt;/li&gt;
&lt;li&gt;Por outro lado, quando alguém mais júnior/sandy revisa o código, a intenção é o aumentar o aprendizado da equipe&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para mais dicas, os palestrantes deixaram a recomendação de um livro que se chama Trabalho Eficaz com Código Legado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Leticia Coelho e Rafaella Ballerini em: soft skills
&lt;/h2&gt;

&lt;p&gt;Coelho e Ballerini falaram da importância das soft skills.&lt;/p&gt;

&lt;p&gt;Antes de começar, definiram hard skills como uma habilidade mais técnica, e que tenha relação com tecnologia. Já as soft skills são características mais difíceis de quantificar.&lt;/p&gt;

&lt;p&gt;Uma das opiniões, que inclusive concordo muito, é não colocar soft skills no currículo. Se você escreve "habilidade de liderança", não tem como provar isso. Então é melhor para você trocar isso por alguma experiência que exigiu a sua habilidade de liderança.&lt;/p&gt;

&lt;p&gt;Não escreva "sou muito comunicativo" no currículo. Em vez disso, conte um projeto onde sua comunicação foi essencial para atingir algum objetivo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Luís Fernando Murara e Rodrigo Miguel em: Post mortem
&lt;/h2&gt;

&lt;p&gt;Como mencionei antes, post mortem é uma reunião para encontrar soluções e criar melhorias após um incidente.&lt;/p&gt;

&lt;p&gt;É importante você ter alertas de incidentes para seus sistemas. Cada alerta gera uma ação de correção:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Corrigir o que o alerta notificou&lt;/li&gt;
&lt;li&gt;Mas se for um falso positivo, a ação é corrigir o próprio alerta&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Documentações de post mortem ajudam a entender os alertas, e geram atividades de post mortem. Essas atividades devem ser entregues em um prazo, e o plano de ação deve ser evitar outro incidente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pokemaobr
&lt;/h2&gt;

&lt;p&gt;Para fechar, o Rodrigo Pokemaobr fez uma meta palestra. Ou seja, uma palestra sobre palestras.&lt;/p&gt;

&lt;p&gt;Segundo ele:&lt;/p&gt;

&lt;p&gt;As vantagens de fazer uma palestra são inúmeras:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Aprender&lt;/strong&gt;: para palestrar, você precisa pesquisar sobre um assunto, logo vai aprender sobre ele&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compartilhar ou ensinar&lt;/strong&gt;: disseminar esse conhecimento para outras pessoas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Viajar&lt;/strong&gt;: conhecer outros lugares, cidade e outras pessoas da #bolhadev&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ganhar dinheiro&lt;/strong&gt;: sim, muitas empresas contratam palestrantes e isso pode ser uma forma de renda&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Networking&lt;/strong&gt;: conhecer pessoas, ajudar elas em projetos, ser ajudado, inclusive em oportunidades profissionais&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Melhorar soft skills&lt;/strong&gt;: melhora a sua comunicação, relação com as pessoas, empatia&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Representatividade&lt;/strong&gt;: se você faz parte de grupos sub-representados, será muito importante para outras pessoas desses grupos verem você lá, para incentivá-los e deixar a área tech cada vez mais diversa&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gerar debates&lt;/strong&gt;: ao trazer um conteúdo para uma palestra, você pode incentivar as pessoas a debaterem sobre aquele assunto&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para começar a se envolver existem muitas formas. Participe de eventos, assista palestras, converse e conheça os organizadores. Outro ponto que o Rodrigo Pokemaobr mencionou, foi ver a programação dos eventos. Isso pode te trazer ideias de quais temas abordar.&lt;/p&gt;

&lt;p&gt;E onde achar eventos para palestrar?&lt;/p&gt;

&lt;p&gt;Você pode procurar no Facebook (sim, ele ainda existe e tem muitos grupos por lá). O Telegram também tem muitos canais que falam sobre tecnologias específicas. As próprias pessoas que você conhece nos eventos são uma fonte para descobrir os próximos. Também fique ligado nos links de Call4Papers, que são as inscrições para palestrantes.&lt;/p&gt;

&lt;p&gt;Além disso, existem dois links do Github que listam eventos com frequência:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Abacatinhos/eventos-tech-brasil" rel="noopener noreferrer"&gt;Abacatinhos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;E a própria &lt;a href="https://github.com/codecon-dev/awesome-communities-and-events-tech-brazil" rel="noopener noreferrer"&gt;Codecon&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como última dica, eu acompanho o anúncio de novos eventos no Twitter e podcasts.&lt;/p&gt;

&lt;p&gt;Por fim, quando for palestrar, pense no tipo de público que vai assistir você. É para uma comunidade? Público mais corporativo? Galera de marketing? São pessoas programadoras com qual senioridade? É um pessoal gamer? Isso vai guiar o seu conteúdo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Callback
&lt;/h2&gt;

&lt;p&gt;Quer ter acesso a todo esse tipo de conteúdo e experiência?&lt;/p&gt;

&lt;p&gt;Comece a participar de eventos e a se conectar com as pessoas. Não precisa ser a Codecon ou algum evento específico, pode ser qualquer um.&lt;/p&gt;

&lt;p&gt;Da sua linguagem, plataforma, cidade, online, presencial...&lt;/p&gt;

&lt;p&gt;Se não tiver nenhum na sua cidade, crie um evento. Chame as pessoas próximas, crie um servidor no Discord e combine com todos.&lt;/p&gt;

</description>
      <category>codecon</category>
      <category>networking</category>
      <category>eventos</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Como usar o forEach em Javascript: exemplos detalhados contados em uma história</title>
      <dc:creator>deMenezes</dc:creator>
      <pubDate>Mon, 04 Sep 2023 11:21:22 +0000</pubDate>
      <link>https://dev.to/demenezes/como-usar-o-foreach-em-javascript-exemplos-detalhados-contados-em-uma-historia-31a4</link>
      <guid>https://dev.to/demenezes/como-usar-o-foreach-em-javascript-exemplos-detalhados-contados-em-uma-historia-31a4</guid>
      <description>&lt;h2&gt;
  
  
  Nessa história envolvente você vai ver em detalhes exemplos simples e complexos sobre o uso do forEach em Javascript. Não deixe de conferir.
&lt;/h2&gt;

&lt;p&gt;É o seu primeiro dia de trabalho como pessoa desenvolvedora Javascript.&lt;/p&gt;

&lt;p&gt;E a sua primeira tarefa é fazer uma alteração em todos os cards de produto de uma página. Esses cards estão em formato de grid:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1693669986-grid-de-produtos.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1693669986-grid-de-produtos.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="grid de produtos em um commerce" width="800" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Durante seus estudos, você descobriu que o forEach executa uma função callback &lt;strong&gt;para cada&lt;/strong&gt; item de uma array:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;for&lt;/code&gt;: para&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;each&lt;/code&gt;: cada&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essa explicação pode parecer muito ampla, mas é isso mesmo que o forEach é, amplo. Você pode usar ele para fazer muitas coisas, não existe uma só intenção.&lt;/p&gt;

&lt;p&gt;Um erro muito comum é achar que ele serve apenas para &lt;em&gt;alterar&lt;/em&gt; cada item da array. O forEach também pode usar cada um deles para fazer outro tipo de alteração.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;names&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;andre&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;marcus&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mario&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;names&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No exemplo acima, o forEach escreve cada nome na lista no console.&lt;/p&gt;

&lt;p&gt;Depois de revisar o forEach, você pega os cards com &lt;code&gt;document.getElementsByClassName('product-card')&lt;/code&gt;, coloca em uma variável e usa o forEach. Malandramente, você usa um console para saber se tudo ocorreu bem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;productCards&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementsByClassName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product-card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;productCards&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Até que BOOM!!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Uncaught TypeError: document.getElementsByClassName(...).forEach is not a function
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"O que há de errado com essa array?!", você pensa.&lt;/p&gt;

&lt;p&gt;Antes de mais nada, isso não é uma array, é um HTMLCollection. &lt;strong&gt;Existem alguns tipos de listas iteráveis no Javascript além da array. E de todos eles, apenas array e nodelist possuem o método forEach&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Eu escrevi um post no blog sobre &lt;a href="https://demenezes.dev/posts/diferenca-entre-array-htmlcollection-nodelist-domtokenlist-namednodemap/" rel="noopener noreferrer"&gt;array, nodelist, HTMLCollection e outros iteráveis em Javascript&lt;/a&gt;. É importante ler para entender essa diferença. &lt;/p&gt;

&lt;p&gt;Antes de prosseguir, saiba que esse post faz parte de uma série de 7 artigos sobre os principais métodos de array em Javascript. Vou postar os próximos na sequência aqui no blog.&lt;/p&gt;

&lt;p&gt;Veja agora a solução desse caso.&lt;/p&gt;

&lt;h2&gt;
  
  
  O método forEach
&lt;/h2&gt;

&lt;p&gt;O método forEach existe tanto em array, quanto em nodelist.&lt;/p&gt;

&lt;p&gt;Se você leu o artigo sobre os iteráveis em Javascript, percebeu que a solução não é tão complicada:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O método &lt;code&gt;getElementsByClassName&lt;/code&gt; retorna um HTMLCollection&lt;/li&gt;
&lt;li&gt;Já o &lt;code&gt;querySelectorAll&lt;/code&gt; retorna um nodelist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Então você precisa mudar a forma de pegar elementos da DOM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;productCards&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.product-card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;productCards&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora sim, nada de erros. Então você remove o console e começa a alteração de verdade. Não vou me aprofundar no tipo de alteração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;productCards&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.product-card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;productCards&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;fazerAlteracao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Show de bola. Tudo perfeito para uma primeira manhã de trabalho.&lt;/p&gt;

&lt;p&gt;Você vai para o almoço tranquilo, já que finalizou a sua primeira tarefa. Mas na volta, outra pauta surge no Jira.&lt;/p&gt;

&lt;h2&gt;
  
  
  O parâmetro index da função callback
&lt;/h2&gt;

&lt;p&gt;O desafio agora é outro, mas ainda no grid de produtos.&lt;/p&gt;

&lt;p&gt;Esse grid tem 5 cards de produto por linha. E agora a pessoa PO decidiu que o último produto de cada linha terá um estilo diferente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1693670133-grid-de-produtos-com-destaque-para-o-ultimo-card-de-produto-de-cada-linha.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1693670133-grid-de-produtos-com-destaque-para-o-ultimo-card-de-produto-de-cada-linha.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="grid de produtos com destaque para o último card de produto de cada linha" width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como aplicar esse estilo apenas no último produto de cada linha?&lt;/p&gt;

&lt;p&gt;Para corrigir, você precisa lembrar que o forEach recebe uma função como parâmetro . Essa função se chama callback, um nome bonito para descrever uma função que você informa como argumento para outra função.&lt;/p&gt;

&lt;p&gt;Essa callback pode receber um segundo parâmetro, ele geralmente se chama &lt;code&gt;index&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;productCards&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.product-card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;productCards&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Index é o índice daquele item dentro da array, e esse valor inicia em zero&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Por exemplo, se você executar o código abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;teclado&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mouse&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;monitor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mesa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Item: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Index: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;---&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Receberá o seguinte resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Item: teclado
Index: 0
---
Item: mouse
Index: 1
---
Item: monitor
Index: 2
---
Item: mesa
Index: 3
---
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O índice será fundamental para criar um estilo diferente para alguns cards do grid.&lt;/p&gt;

&lt;p&gt;Se cada item da lista tem um index, cada card de produto no grid também tem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Os cards da primeira fileira têm o index 0, 5, 10...&lt;/li&gt;
&lt;li&gt;Os cards da segunda fileira têm o index 1, 6, 11...&lt;/li&gt;
&lt;li&gt;Os cards da terceira  fileira têm o index 2, 7, 12...&lt;/li&gt;
&lt;li&gt;Os cards da quarta fileira têm o index 3, 8, 13...&lt;/li&gt;
&lt;li&gt;Os cards da quinta fileira têm o index 4, 9, 14...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1693670167-grid-de-produtos-com-destaque-para-o-indice-de-cada-card-de-produto.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdemenezes.dev%2F_next%2Fimage%2F%3Furl%3Dhttps%253A%252F%252Fwww.datocms-assets.com%252F64896%252F1693670167-grid-de-produtos-com-destaque-para-o-indice-de-cada-card-de-produto.png%253Fauto%253Dformat%26w%3D3840%26q%3D75" alt="grid de produtos com destaque para o índice de cada card de produto" width="800" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O foco está nos índices 4, 9, 14... Agora, como alterar apenas eles? Após muito Google, Stackoverflow e lágrimas, você descobre o operador &lt;em&gt;módulo&lt;/em&gt; (%) que retorna o resto da divisão. Exemplos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;3 % 2 = 1 (três dividido por dois dá 1 e &lt;em&gt;sobra 1&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;9 % 5 = 4 (nove dividido por cinco dá 1 e &lt;em&gt;sobra 4&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;12 % 5 = 2 (doze dividido por cinco dá 2 e &lt;em&gt;sobra 2&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Após mais alguns testes, você descobre que se usar eles com módulo em 5, o resultado é sempre o mesmo, 4:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;4&lt;/strong&gt; % 5 = 4 (quatro dividido por cinco dá 0 e &lt;em&gt;sobra 4&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;9&lt;/strong&gt; % 5 = 4 (nove dividido por cinco dá 1 e &lt;em&gt;sobra 4&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;14&lt;/strong&gt; % 5 = 4 (quatorze dividido por cinco dá 2 e &lt;em&gt;sobra 4&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Não importa quanto dá, ou seja, o resultado, e sim quanto sobra no final da divisão.&lt;/p&gt;

&lt;p&gt;O número 5 funciona aqui, porque ele é a quantidade de cards por linha.&lt;/p&gt;

&lt;p&gt;Lembra como estava a sua função antes? Veja como ela fica agora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;productCards&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.product-card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;productCards&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// alterar o estilo ao adicionar uma classe&lt;/span&gt;
    &lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;alternate-style&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// não alterar o estilo&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tudo está perfeito... até que o requisito muda...&lt;/p&gt;

&lt;h2&gt;
  
  
  O parâmetro array da função callback
&lt;/h2&gt;

&lt;p&gt;Agora tudo mudou.&lt;/p&gt;

&lt;p&gt;Eles não querem mais alterar o estilo do último card de cada linha. E sim alterar o estilo da segunda metade dos cards. What?!&lt;/p&gt;

&lt;p&gt;Sim, se o grid tiver 16 produtos, você deve alterar o estilo dos últimos 8. Ignore por enquanto casos de grids com número ímpar de cards.&lt;/p&gt;

&lt;p&gt;Legal, e agora?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Além dos parâmetros item e index, a função callback também pode receber o terceiro e último parâmetro. Ele geralmente se chama array e retorna a própria lista que você está iterando&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No exemplo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;teclado&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mouse&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;monitor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mesa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;---&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;item:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;index:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;array:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
item: teclado
index: 0
array: (4) ['teclado', 'mouse', 'monitor', 'mesa']
---
item: mouse
index: 1
array: (4) ['teclado', 'mouse', 'monitor', 'mesa']
---
item: monitor
index: 2
array: (4) ['teclado', 'mouse', 'monitor', 'mesa']
---
item: mesa
index: 3
array: (4) ['teclado', 'mouse', 'monitor', 'mesa']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se você voltar agora para o exemplo do grid, pode usar esse parâmetro a seu favor.&lt;/p&gt;

&lt;p&gt;Se você acessar &lt;code&gt;array.length&lt;/code&gt;, vai receber a quantidade de itens da array. Se dividir por 2, estará mais perto ainda do resultado. Veja como fica:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;productCards&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.product-card&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;productCards&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;half&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;half&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// alterar o estilo ao adicionar uma classe&lt;/span&gt;
    &lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;alternate-style&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// não alterar o estilo&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui você descobre qual é o número que representa a metade da quantidade de itens da array (&lt;code&gt;half&lt;/code&gt;). Depois verifica se o index atual é maior do que isso. Se sim, altera o estilo do card.&lt;/p&gt;

&lt;p&gt;Apesar de a função callback poder receber 3 parâmetros, dificilmente você usará todos. Arrisco dizer que 90% das tarefas você faz apenas com o primeiro, o &lt;code&gt;item&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Após executar esse último forEach, você deseja pegar o valor dele e fazer alguma operação, porém...&lt;/p&gt;

&lt;h2&gt;
  
  
  O que o forEach retorna?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;O forEach não retorna nada.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ou melhor, toda função retorna alguma coisa. Mas quando você ouvir que a função &lt;em&gt;não retorna nada&lt;/em&gt;, significa que ela retorna &lt;code&gt;undefined&lt;/code&gt;. &lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#valor_retornadohttps:/developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#valor_retornado" rel="noopener noreferrer"&gt;E esse é o caso do forEach&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;qualquer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;coisa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;na&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lista&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// executa alguma coisa com o item&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Logo, você não precisa criar uma variável para receber o retorno dele, pois o retorno não varia.&lt;/p&gt;

&lt;p&gt;Como falei no começo, o forEach executa uma função &lt;strong&gt;para cada&lt;/strong&gt; item de uma array, e depois disso ele &lt;em&gt;encerra&lt;/em&gt; aquela expressão. Não é possível ligar outros métodos no forEach.&lt;/p&gt;

&lt;p&gt;Mas se você realmente precisa de um retorno, não deve usar o forEach, e sim o map. Map é um outro método famoso no Javascript, e será tema do próximo artigo da série sobre os principais métodos Javascript 😬&lt;/p&gt;

&lt;h2&gt;
  
  
  Callback
&lt;/h2&gt;

&lt;p&gt;Não estou falando da callback do forEach haha&lt;/p&gt;

&lt;p&gt;Caso você não saiba, &lt;em&gt;Callback&lt;/em&gt; é como eu chamo o capítulo final dos posts. Porque agora é o momento de &lt;em&gt;retomar&lt;/em&gt; o que você aprendeu. Então vamos lá.&lt;/p&gt;

&lt;p&gt;O forEach é um método Javascript que executa uma função &lt;strong&gt;para cada&lt;/strong&gt; item de uma array ou nodelist.&lt;/p&gt;

&lt;p&gt;Ele não serve apenas para alterar cada item de uma lista.&lt;/p&gt;

&lt;p&gt;Se você tentar usar esse método com outros tipos de lista, como um HTMLCollection, receberá um erro.&lt;/p&gt;

&lt;p&gt;A função callback que você informa para o forEach pode receber três parâmetros. O primeiro é cada um dos itens da lista. O segundo é o índice do item. Ele inicia em zero e avança até o tamanho total da lista menos 1. E o terceiro é a própria array que você está iterando.&lt;/p&gt;

&lt;p&gt;O forEach é um método que &lt;em&gt;não retorna nada&lt;/em&gt;. Ou melhor dizendo, sempre retorna &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Os problemas que apresentei nesse post servem apenas para fins didáticos. Isso significa que o forEach não é a melhor solução para eles. Se você ainda está no início dos estudos, ignore isso e foque apenas em entender como o forEach funciona.&lt;/p&gt;

&lt;p&gt;Esse e os próximos artigos sobre os principais métodos Javascript são muito especiais. Não só porque os projetos exigem o uso deles, mas porque tive uma certa dificuldade para aprender.&lt;/p&gt;

&lt;p&gt;Aqui no blog busco explicar de uma forma que você não tenha as mesmas dificuldades que eu tive. Se ficou com alguma dúvida, não deixe de comentar para que eu possa melhorar as explicações cada vez mais.&lt;/p&gt;

&lt;p&gt;Obrigado pelo seu tempo e sua leitura 😬.&lt;/p&gt;

&lt;p&gt;Continue estudando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach" rel="noopener noreferrer"&gt;https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Expressions_and_Operators" rel="noopener noreferrer"&gt;https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Expressions_and_Operators&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>foreach</category>
      <category>javascript</category>
      <category>array</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
