<?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: Anil Seervi</title>
    <description>The latest articles on DEV Community by Anil Seervi (@anilseervi).</description>
    <link>https://dev.to/anilseervi</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%2F727026%2F2cad13f7-c5f8-48ef-a22e-13890823fa19.jpeg</url>
      <title>DEV Community: Anil Seervi</title>
      <link>https://dev.to/anilseervi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anilseervi"/>
    <language>en</language>
    <item>
      <title>Higher-Order Array Functions forEach, map and filter</title>
      <dc:creator>Anil Seervi</dc:creator>
      <pubDate>Sat, 11 Dec 2021 11:27:06 +0000</pubDate>
      <link>https://dev.to/anilseervi/higher-order-array-function-foreach-map-and-filter-f64</link>
      <guid>https://dev.to/anilseervi/higher-order-array-function-foreach-map-and-filter-f64</guid>
      <description>&lt;p&gt;Array methods such as &lt;code&gt;forEach()&lt;/code&gt;, &lt;code&gt;map()&lt;/code&gt; and &lt;code&gt;filter()&lt;/code&gt; are some of the &lt;em&gt;Higher Order &lt;strong&gt;Array&lt;/strong&gt; Functions&lt;/em&gt; that come in very handy when you have to work with data that's in an Array.&lt;/p&gt;

&lt;p&gt;In this article we'll be discussing the following Higher-Order Functions, with examples :&lt;/p&gt;

&lt;ul&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;/ul&gt;

&lt;p&gt;I'll be assuming that you have a basic understanding of what &lt;em&gt;Higher-Order Functions&lt;/em&gt; are and how to work with them, &lt;strong&gt;if not&lt;/strong&gt;, I recommend you read my previous article on it.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/anilseervi" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F727026%2F2cad13f7-c5f8-48ef-a22e-13890823fa19.jpeg" alt="anilseervi"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/anilseervi/what-are-higher-order-functions-3p0p" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Understanding Higher Order Functions in JavaScript.&lt;/h2&gt;
      &lt;h3&gt;Anil Seervi ・ Dec 4 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#functions&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#es6&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  Array.forEach()
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;forEach()&lt;/code&gt; method is very useful to perform certain operation(s) for every element in the Array.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;forEach()&lt;/code&gt; method on an Array executes the provided &lt;em&gt;callback function&lt;/em&gt; for each element in the array in ascending index(starting 0).&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callbackFn&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;element&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&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;h4&gt;
  
  
  Parameters
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;callbackFn&lt;/code&gt;&lt;br&gt;
Function to execute on each element. It accepts one to three arguments :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;element&lt;/code&gt; : The current element being processed in the array.&lt;br&gt;
&lt;code&gt;index&lt;/code&gt; (&lt;em&gt;optional&lt;/em&gt;) : The index of &lt;code&gt;element&lt;/code&gt; in array.&lt;br&gt;
&lt;code&gt;array&lt;/code&gt; (&lt;em&gt;optional&lt;/em&gt;) : The array on which &lt;code&gt;forEach()&lt;/code&gt; was called upon.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;forEach()&lt;/code&gt; method doesn't return anything : &lt;code&gt;undefined&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you look at the signature of the callback function in this method, it looks similar to the &lt;code&gt;forEach()&lt;/code&gt; function that I created in the previous &lt;strong&gt;Higher-Order Functions&lt;/strong&gt; article.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/anilseervi" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F727026%2F2cad13f7-c5f8-48ef-a22e-13890823fa19.jpeg" alt="anilseervi"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/anilseervi/what-are-higher-order-functions-3p0p" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Understanding Higher Order Functions in JavaScript.&lt;/h2&gt;
      &lt;h3&gt;Anil Seervi ・ Dec 4 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#functions&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#es6&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;






&lt;h3&gt;
  
  
  Examples
&lt;/h3&gt;

&lt;p&gt;Let's recreate the same example now using the &lt;code&gt;Array.forEach()&lt;/code&gt; method :&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;numbs&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;9&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;                 &lt;span class="c1"&gt;// Array of numbers&lt;/span&gt;

&lt;span class="nx"&gt;numbs&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;n&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;arr&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="c1"&gt;// n =&amp;gt; element, i =&amp;gt; index, arr =&amp;gt; array(numbs)&lt;/span&gt;
 &lt;span class="nx"&gt;arr&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="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;                             &lt;span class="c1"&gt;// add 2 to current element&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nx"&gt;numbs&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;n&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;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;n&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;        &lt;span class="c1"&gt;// logs all element one-by-one&lt;/span&gt;
&lt;span class="c1"&gt;// 7&lt;/span&gt;
&lt;span class="c1"&gt;// 11&lt;/span&gt;
&lt;span class="c1"&gt;// 12&lt;/span&gt;
&lt;span class="c1"&gt;// 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As the &lt;code&gt;forEach()&lt;/code&gt; is a method on the array itself, we can call it on any array using the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_accessors#dot_notation" rel="noopener noreferrer"&gt;&lt;em&gt;dot notation&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the above example we've called &lt;code&gt;Array.forEach()&lt;/code&gt; &lt;em&gt;Higher-Order function&lt;/em&gt; twice with arrow functions as callbacks, defined right withing &lt;code&gt;forEach()&lt;/code&gt;'s parameters.&lt;/p&gt;




&lt;p&gt;Say we have an Array of full names and you are required to separate all the full names into &lt;code&gt;firstName&lt;/code&gt; and &lt;code&gt;lastName&lt;/code&gt; of an object and push them into an array that already contains same kind-of data. How'd you do it?&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;fullNames&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="s2"&gt;Adam Benson&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="s2"&gt;Clare Donaldson&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="s2"&gt;Ben Adams&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="s2"&gt;Donald Clarkson&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;Here's how you can use the &lt;code&gt;forEach()&lt;/code&gt; to push objects containing &lt;code&gt;firstName&lt;/code&gt; and &lt;code&gt;lastName&lt;/code&gt; property to the &lt;code&gt;names&lt;/code&gt; 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;names&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;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Anil&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Seervi&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;fullNames&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;n&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="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="c1"&gt;// empty object for initialization&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;firstName&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;lastName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="s2"&gt;` `&lt;/span&gt; &lt;span class="c1"&gt;// split at spaces and destructure initialize&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;push&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="c1"&gt;// push the object to names array&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;names&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="cm"&gt;/*
[
  { firstName: 'Anil', lastName: 'Seervi' }
  { firstName: 'Adam', lastName: 'Benson' },
  { firstName: 'Clare', lastName: 'Donaldson' },
  { firstName: 'Ben', lastName: 'Adams' },
  { firstName: 'Donald', lastName: 'Clarkson' }
]
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above example, within our callback, we create an empty object &lt;code&gt;obj&lt;/code&gt; to store the properties. Then we split the current element of the array at spaces, destructure it right away storing it to properties &lt;code&gt;firstName&lt;/code&gt; and &lt;code&gt;lastName&lt;/code&gt; in the object &lt;code&gt;obj&lt;/code&gt;. At last we push the object into the &lt;code&gt;names&lt;/code&gt; array.&lt;/p&gt;




&lt;h2&gt;
  
  
  Array.map()
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Array.map()&lt;/code&gt; method comes very handy when you have to create a new array from executing a certain function on an existing array.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;Array.map()&lt;/code&gt; method on an Array returns a new array populated with the return value of the &lt;em&gt;callback function&lt;/em&gt; called for every element in an array in ascending index(starting 0).&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callbackFn&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;element&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&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;// returns a new array populated with results of callbackFn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Parameters
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;callbackFn&lt;/code&gt;&lt;br&gt;
Function to execute on each element of &lt;code&gt;arr&lt;/code&gt;. Each time &lt;code&gt;callbackFn&lt;/code&gt; executes, the return value is added to the &lt;code&gt;newArray&lt;/code&gt;.&lt;br&gt;
It accepts one to three arguments :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;element&lt;/code&gt; : The current element being processed in the array.&lt;br&gt;
&lt;code&gt;index&lt;/code&gt; (&lt;em&gt;optional&lt;/em&gt;) : The index of &lt;code&gt;element&lt;/code&gt; in array.&lt;br&gt;
&lt;code&gt;array&lt;/code&gt; (&lt;em&gt;optional&lt;/em&gt;) : The array on which &lt;code&gt;map()&lt;/code&gt; was called upon.&lt;/p&gt;
&lt;h4&gt;
  
  
  Return value
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;map()&lt;/code&gt; method returns a &lt;strong&gt;new Array&lt;/strong&gt; with each element being the result of the callback function.&lt;/p&gt;


&lt;h3&gt;
  
  
  Examples
&lt;/h3&gt;

&lt;p&gt;Let's assume we are given the following array and are told to produce another array of consisting of the sqaures of all the respective elements.&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;numbs&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;9&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;     &lt;span class="c1"&gt;// our boring array of numbers&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The easiest way to do this will be by using the &lt;code&gt;Array.map()&lt;/code&gt; method :&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;squares&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbs&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;n&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;n&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;// Yes, its easy as that!!&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;numbs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// [ 5, 9, 10, 1 ]&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;sqaures&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// [ 25, 81, 100, 1 ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That was so easy right. All we need to do is to call the &lt;code&gt;map()&lt;/code&gt; method on our &lt;code&gt;numbs&lt;/code&gt; array and return the square of the current element within it for our logic. As the &lt;code&gt;map()&lt;/code&gt; method itself returns a new Array, we store it in the variable &lt;code&gt;sqaures&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;Now let's look at another example where we'll convert an array of objects with &lt;code&gt;firstName&lt;/code&gt; and &lt;code&gt;lastName&lt;/code&gt; properties that we got as our output in the &lt;code&gt;forEach()&lt;/code&gt; and create another array which will consist of only full names. Kinda the reverse of what we did in &lt;code&gt;forEach()&lt;/code&gt; example.&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;// array of objects with firstName and lastName&lt;/span&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="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Anil&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;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Adam&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Benson&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;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Clare&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Donaldson&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;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ben&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Adams&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;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Donald&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Clarkson&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;// create a new Array of fullNames using names Array&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fullNames&lt;/span&gt; &lt;span class="o"&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;map&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="o"&gt;=&amp;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;full_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&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="nx"&gt;firstName&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="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;full_name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trimEnd&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;fullNames&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// [ 'Anil', 'Adam Benson', 'Clare Donaldson', 'Ben Adams', 'Donald Clarkson' ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Above, the first thing you'll notice while looking at the example is we don't have &lt;code&gt;lastName&lt;/code&gt; property for my name and our logic will have to handle that too.&lt;/p&gt;

&lt;p&gt;Within the callback of our &lt;code&gt;map()&lt;/code&gt; method we are using template literals to concatenate &lt;code&gt;firstName&lt;/code&gt; and &lt;code&gt;lastName&lt;/code&gt;(if any: using optional chaining) to form the &lt;code&gt;full_name&lt;/code&gt;. And returning trimmed &lt;code&gt;full_name&lt;/code&gt; from the callback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Array.filter()
&lt;/h2&gt;

&lt;p&gt;As the name implies, this method is used to filter out the array which meets a certain condition.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Array.filter()&lt;/code&gt; method on the Array returns an new Array with only the elements that pass the test condition within the &lt;em&gt;callback function&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callbackFn&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;element&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* ... */&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="c1"&gt;// returns a new array with elements that satisfy the callback condition.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Parameters
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;callbackFn&lt;/code&gt;&lt;br&gt;
Function is a predicate to execute on each element of &lt;code&gt;arr&lt;/code&gt;. Each time &lt;code&gt;callbackFn&lt;/code&gt; is called, only the &lt;code&gt;element&lt;/code&gt;'s that coerce to &lt;code&gt;true&lt;/code&gt; are added into the new Array.&lt;br&gt;
It accepts one to three arguments :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;element&lt;/code&gt; : The current element being processed in the array.&lt;br&gt;
&lt;code&gt;index&lt;/code&gt; (&lt;em&gt;optional&lt;/em&gt;) : The index of &lt;code&gt;element&lt;/code&gt; in array.&lt;br&gt;
&lt;code&gt;array&lt;/code&gt; (&lt;em&gt;optional&lt;/em&gt;) : The array on which &lt;code&gt;filter()&lt;/code&gt; was called upon.&lt;/p&gt;
&lt;h5&gt;
  
  
  Return Value
&lt;/h5&gt;

&lt;p&gt;The &lt;code&gt;filter()&lt;/code&gt; method returns a &lt;strong&gt;new Array&lt;/strong&gt; with only the elements that satisfy the test condition in the &lt;code&gt;callbackFn&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Examples
&lt;/h3&gt;

&lt;p&gt;To keep it easier to understand I'm taking our same old &lt;code&gt;numbs&lt;/code&gt; array to work on.&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;numbs&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;9&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="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="c1"&gt;// hey, I'm bigger this time :)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;lets pose a couple question so to &lt;code&gt;filter&lt;/code&gt; our boring array.&lt;/p&gt;

&lt;p&gt;Q1. &lt;em&gt;Obtain an array of &lt;strong&gt;Odd Numbers&lt;/strong&gt; from &lt;code&gt;numbs&lt;/code&gt;&lt;/em&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;odd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numbs&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;n&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;n&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="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;odd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// [ 5, 9, 1, 3]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within the callback, we return true only for &lt;em&gt;odd&lt;/em&gt; numbers in our array which in-turn returns all odd numbers in our &lt;code&gt;numbs&lt;/code&gt; array.&lt;/p&gt;

&lt;p&gt;Q2. &lt;em&gt;Obtain an array of &lt;strong&gt;Prime Numbers&lt;/strong&gt; from &lt;code&gt;numbs&lt;/code&gt;&lt;/em&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;function&lt;/span&gt; &lt;span class="nf"&gt;isPrime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numb&lt;/span&gt;&lt;span class="p"&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;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;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numb&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;s&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numb&lt;/span&gt; &lt;span class="o"&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="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="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;numb&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="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;numbs&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;isPrime&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="c1"&gt;// [ 5, 3 ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here &lt;code&gt;isPrime&lt;/code&gt; is our callback for &lt;code&gt;filter&lt;/code&gt; method which gets called with every element in &lt;code&gt;numbs&lt;/code&gt; and acts as our condition to filter out numbers that are &lt;em&gt;prime&lt;/em&gt;.&lt;/p&gt;




&lt;p&gt;Below is a composite example of both &lt;code&gt;map()&lt;/code&gt; and &lt;code&gt;filter()&lt;/code&gt; methods. I'm going to create an Array that'll contain names of my GitHub Repos which are majorly written with &lt;strong&gt;SCSS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The example is an &lt;em&gt;async&lt;/em&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/IIFE" rel="noopener noreferrer"&gt;&lt;code&gt;IIFE&lt;/code&gt;(Immediately Invoked Function Expression)&lt;/a&gt; Function that'll get &lt;em&gt;called as soon as it's defined&lt;/em&gt;. Within our async function, I'm fetching the data related to my GitHub repos in JSON format using GitHub's REST API.&lt;/p&gt;

&lt;p&gt;The API returns an Array of Objects that contain information about my public GitHub repositories listed alphabetically. You can see the response of the API by visiting the below URL:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maximum of 30 repos: &lt;a href="https://api.github.com/users/AnilSeervi/repos" rel="noopener noreferrer"&gt;https://api.github.com/users/AnilSeervi/repos&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;All the repos : &lt;a href="https://api.github.com/users/anilseervi/repos?per_page=100" rel="noopener noreferrer"&gt;https://api.github.com/users/anilseervi/repos?per_page=100&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The API only returns a maximum of 30 repos without any query parameters.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&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="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;jsRepos&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;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.github.com/users/AnilSeervi/repos?per_page=100&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="c1"&gt;// fetch the JSON from API&lt;/span&gt;
 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                                      &lt;span class="c1"&gt;// parse JSON to JavaScript Object&lt;/span&gt;

 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;filterJSRepos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&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;i&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;language&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SCSS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="c1"&gt;// filter the Repos based on language&lt;/span&gt;
 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;repoNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;filterReposData&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;i&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                 &lt;span class="c1"&gt;// Create an array of filtered Repo names&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;repoNames&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="c1"&gt;// ['DevFolio', 'mdn-minimalist', 'ts-portfolio']&lt;/span&gt;
&lt;span class="p"&gt;})()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response(in JSON) fetched from the &lt;strong&gt;URL&lt;/strong&gt; is stored in &lt;code&gt;res&lt;/code&gt; and then converted to a JavaScript Object that is stored in &lt;code&gt;data&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: The names and number of repos may change based on the time you are reading this.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now we have an Array of objects of all the repos which we need to be filtered based on the &lt;code&gt;language&lt;/code&gt; property. Objects whose language property is &lt;code&gt;SCSS&lt;/code&gt; are filtered into &lt;code&gt;filterJSRepos&lt;/code&gt; constant.&lt;/p&gt;

&lt;p&gt;After filtering the Repos, we can now grab just the &lt;code&gt;name&lt;/code&gt; property of the filtered Repos using &lt;code&gt;map()&lt;/code&gt; and &lt;em&gt;voila&lt;/em&gt;, there's our array that contains the names of my repos those majorly contain &lt;strong&gt;SCSS&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;I hope this article helped you understand the &lt;strong&gt;Higher-Order Array Functions&lt;/strong&gt;(&lt;code&gt;forEach()&lt;/code&gt;, &lt;code&gt;map()&lt;/code&gt;, &lt;code&gt;filter()&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Thank you for reading, let's connect!
&lt;/h3&gt;

&lt;p&gt;Thank you for reading my blog. Feel free to ask questions and leave any comments down here and, let's connect on &lt;a href="https://twitter.com/linASeervi" rel="noopener noreferrer"&gt;Twitter!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Understanding Higher Order Functions in JavaScript.</title>
      <dc:creator>Anil Seervi</dc:creator>
      <pubDate>Sat, 04 Dec 2021 15:22:02 +0000</pubDate>
      <link>https://dev.to/anilseervi/what-are-higher-order-functions-3p0p</link>
      <guid>https://dev.to/anilseervi/what-are-higher-order-functions-3p0p</guid>
      <description>&lt;p&gt;In JavaScript, functions are &lt;em&gt;values&lt;/em&gt;(&lt;strong&gt;first-class citizens&lt;/strong&gt;). This means that they can be assigned to a variable and/or be passed as arguments and can also be returned from another function.&lt;/p&gt;

&lt;p&gt;These features or abilities open the door for various types of functions like, &lt;em&gt;First-class functions&lt;/em&gt;, &lt;em&gt;Callback functions&lt;/em&gt;, &lt;em&gt;Higher-order functions&lt;/em&gt;, &lt;em&gt;Anonymous functions&lt;/em&gt; and more.&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;numbs&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;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;7&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="c1"&gt;// First-class and Anonymous function&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;incr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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;// Higher-Order function with Callback function&lt;/span&gt;
&lt;span class="nx"&gt;numbs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;incr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// 3&lt;/span&gt;
&lt;span class="c1"&gt;// 5&lt;/span&gt;
&lt;span class="c1"&gt;// 6&lt;/span&gt;
&lt;span class="c1"&gt;// 8&lt;/span&gt;
&lt;span class="c1"&gt;// 2&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Having a clear and better understanding of how &lt;strong&gt;Higher-Order functions&lt;/strong&gt; work can save you a lot of time and make your logical implementation seamless.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 What actually is an Higher-Order Function?
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;Higher-Order Function&lt;/strong&gt; is a function that will at least :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;take one or more functions as arguments&lt;/li&gt;
&lt;li&gt;returns a function as its result&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The function that is passed as an argument to the higher-order function is known as a &lt;strong&gt;Callback Function&lt;/strong&gt;, because is it, to be 'called-back' by the higher-order function at a later time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The term &lt;em&gt;Callback Function&lt;/em&gt; keeps popping up often in JavaScript World, so it is crucial that you understand it!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Examples
&lt;/h3&gt;

&lt;p&gt;Let's look at a simple example :&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;success&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;: Success&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// log success message&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;: Error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="c1"&gt;// log error message&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;notify&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cb&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="c1"&gt;// Higher-Order Function&lt;/span&gt;
 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Notification was &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;
 &lt;span class="nx"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                        &lt;span class="c1"&gt;// callback call&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;success&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                 &lt;span class="c1"&gt;// Notification was Sent : Success&lt;/span&gt;
&lt;span class="nx"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Not Sent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;               &lt;span class="c1"&gt;// Notification was Not Sent : Error&lt;/span&gt;
&lt;span class="nx"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sent, but didn't reach&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Notification was Sent, but didn't reach : Error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Above is an example to notify success and error notification messages.&lt;/p&gt;

&lt;p&gt;The function &lt;code&gt;notify()&lt;/code&gt; is an &lt;em&gt;higher-order function&lt;/em&gt; because it takes a &lt;em&gt;callback function&lt;/em&gt; as its second argument.&lt;br&gt;
The two functions &lt;code&gt;success()&lt;/code&gt; and &lt;code&gt;error()&lt;/code&gt; are used as callbacks for various status messages.&lt;/p&gt;

&lt;p&gt;You can notice that when we call the &lt;code&gt;notify()&lt;/code&gt; function, we are passing the respective callback function, which will be called-back later within the higher-order function.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Callbacks in JavaScript are often referred to as &lt;code&gt;cb&lt;/code&gt; in parameters.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Now Let's look at a simpler implementation of the &lt;code&gt;forEach()&lt;/code&gt; Array method, which will perform the callback on each element of the array we pass.&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;numbs&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;9&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;                 &lt;span class="c1"&gt;// Array of numbers&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;addTwo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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;arr&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;arr&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="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;                             &lt;span class="c1"&gt;// add 2 to current iteration element&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;forEach&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cb&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="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;arr&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="nx"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&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;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;numbs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                    &lt;span class="c1"&gt;// callback call with: current element, index and array itself.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numbs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;addTwo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                      &lt;span class="c1"&gt;// adds 2 to every element in numbs array&lt;/span&gt;
&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numbs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;       &lt;span class="c1"&gt;// arrow function as callback: logs all the elements&lt;/span&gt;
&lt;span class="c1"&gt;// 7&lt;/span&gt;
&lt;span class="c1"&gt;// 11&lt;/span&gt;
&lt;span class="c1"&gt;// 12&lt;/span&gt;
&lt;span class="c1"&gt;// 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above example we've built our own simpler version of the &lt;code&gt;Array.forEach()&lt;/code&gt; method that performs a certain operation specified by the callback for every element in the Array.&lt;/p&gt;

&lt;p&gt;At every iteration we pass the current value, current index and the array that's being operated, into the callback.&lt;/p&gt;

&lt;p&gt;When we call the &lt;code&gt;forEach()&lt;/code&gt; for the first time with the &lt;em&gt;callback function&lt;/em&gt; &lt;code&gt;addTwo()&lt;/code&gt;, it adds 2 to the current iteration element and stores it back in the array.&lt;/p&gt;

&lt;p&gt;At the second call of our &lt;code&gt;forEach()&lt;/code&gt; &lt;em&gt;higher-order function&lt;/em&gt;, we've directly defined an arrow function(&lt;code&gt;() =&amp;gt; {}&lt;/code&gt;) into the argument as the callback function; which just logs the current iteration element.&lt;/p&gt;

&lt;p&gt;This ought to give you a basic understanding of what &lt;em&gt;higher-order functions&lt;/em&gt; and &lt;em&gt;callback functions&lt;/em&gt; are.&lt;/p&gt;




&lt;h4&gt;
  
  
  Thank you for reading, let's connect!
&lt;/h4&gt;

&lt;p&gt;Thank you for reading my blog. Feel free to drop your questions or any comments below and, let's connect on &lt;a href="https://twitter.com/linASeervi"&gt;Twitter!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>functions</category>
      <category>webdev</category>
      <category>es6</category>
    </item>
    <item>
      <title>Winning my First Hacktoberfest!</title>
      <dc:creator>Anil Seervi</dc:creator>
      <pubDate>Sat, 16 Oct 2021 14:34:22 +0000</pubDate>
      <link>https://dev.to/anilseervi/winning-my-first-hacktoberfest-1ko7</link>
      <guid>https://dev.to/anilseervi/winning-my-first-hacktoberfest-1ko7</guid>
      <description>&lt;p&gt;Hello 👋🏽 to Everyone reading this.&lt;/p&gt;

&lt;p&gt;This is my first post on &lt;a href="https://dev.to"&gt;dev.to&lt;/a&gt; and I'm so excited to tell the journey of my first &lt;a href="https://hacktoberfest.digitalocean.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Hacktoberfest&lt;/strong&gt;&lt;/a&gt; Event.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backstory
&lt;/h2&gt;

&lt;p&gt;It all started before the month of hacktoberfest when I came across a post in &lt;em&gt;dev.to&lt;/em&gt; which showcased winning swag by contributing to &lt;em&gt;Open-Source&lt;/em&gt;. I love contributing to Open-Source and I straight away checked the official website and waited for the registration to start. As I was earlier to this before the start of month October, I registered right away when the registrations opened.&lt;/p&gt;

&lt;p&gt;I came to know that last year was disastrous for some repo maintainers because of the spam they had to deal with. So as I went through the rules for participating in this year's event and it was obvious that organizers would make it more strict this time to avoid any spam.&lt;/p&gt;

&lt;h2&gt;
  
  
  Main Event
&lt;/h2&gt;

&lt;p&gt;My first PR to count towards the event was : &lt;a href="https://github.com/kimlimjustin/xplorer/pull/108" rel="noopener noreferrer"&gt;https://github.com/kimlimjustin/xplorer/pull/108&lt;/a&gt; which was on 1st Oct.&lt;br&gt;
I was already contributing to the &lt;a href="https://github.com/kimlimjustin/xplorer" rel="noopener noreferrer"&gt;kimlimjustin/xplorer&lt;/a&gt; repo(&lt;em&gt;which btw is a well-designed cross-platform file-explorer you might wanna check out!&lt;/em&gt;) before the hacktoberfest kicked-off and as this is my first event I didn't know how the PR's were counted and all.&lt;/p&gt;

&lt;p&gt;It was only when I checked the official website for any update I came to know that a PR had already been counted towards the event and the repo I submitted to was participating in the event.😅&lt;/p&gt;

&lt;p&gt;Seeing that already 1 out of 4 PR was already done, I was on a rampage to find more repos tagged with the &lt;code&gt;hacktoberfest&lt;/code&gt; labels to contribute to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributions
&lt;/h2&gt;

&lt;p&gt;Here's the list of the PR's that I submitted, counted towards the event :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kimlimjustin/xplorer/pull/108" rel="noopener noreferrer"&gt;kimlimjustin/xplorer#108&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mui-org/material-ui/pull/28762" rel="noopener noreferrer"&gt;mui-org/material-u#28762&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mui-org/material-ui/pull/28751" rel="noopener noreferrer"&gt;mui-org/material-u#28751&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kimlimjustin/xplorer/pull/121" rel="noopener noreferrer"&gt;kimlimjustin/xplorer#121&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kimlimjustin/xplorer/pull/124" rel="noopener noreferrer"&gt;kimlimjustin/xplorer#124&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kimlimjustin/xplorer/pull/117" rel="noopener noreferrer"&gt;kimlimjustin/xplorer#117&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kimlimjustin/xplorer/pull/128" rel="noopener noreferrer"&gt;kimlimjustin/xplorer#128&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zero-to-mastery/resources/pull/736" rel="noopener noreferrer"&gt;zero-to-mastery/resources#736&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kimlimjustin/xplorer/pull/143" rel="noopener noreferrer"&gt;kimlimjustin/xplorer#143&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Sangwan5688/BlackHole/pull/125" rel="noopener noreferrer"&gt;Sangwan5688/BlackHole#125&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/github/docs/pull/11120" rel="noopener noreferrer"&gt;github/docs#11120&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kimlimjustin/xplorer/pull/165" rel="noopener noreferrer"&gt;kimlimjustin/xplorer#165&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/github/docs/pull/11328" rel="noopener noreferrer"&gt;github/docs#11328&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/github/docs/pull/11295" rel="noopener noreferrer"&gt;github/docs#11295&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/github/docs/pull/11234" rel="noopener noreferrer"&gt;github/docs#11234&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you'll look at all the PR's I've made during this time, you'll notice that all of them are minor yet notable changes and these contributions meet the criteria for being counted towards the hacktoberfest event.&lt;/p&gt;

&lt;p&gt;I'm also a newbie to Open-source and have only been able to make minor doc changes for this time's event. I'm starting to get the hang of it now by actually interacting with maintainers and other contributors. It's such a welcoming community who guide beginners with such patience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;As the minimun PRs required to win some swag is 4, mine were only waiting for the review period of 14 days to complete today.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F129q2o0cpli21rpc3sev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F129q2o0cpli21rpc3sev.png" alt="How to win Hacktoberfest"&gt;&lt;/a&gt;&lt;br&gt;
This time &lt;a href="https://hacktoberfestswaglist.com/#swag-list-2021" rel="noopener noreferrer"&gt;official event swag&lt;/a&gt; include:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcopdhz6p28fs9wokyd7r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcopdhz6p28fs9wokyd7r.png" alt="Hacktoberfest 2021 T-shirt swag"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;T-Shirts&lt;/li&gt;
&lt;li&gt;Stickers&lt;/li&gt;
&lt;li&gt;&lt;a href="https://shop.dev.to/products/dev-hacktoberfest-badge"&gt;Dev.to badge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These rewards can be claimed after 4 of you're PRs have successfully passed the review.&lt;/p&gt;

&lt;p&gt;Thank you for reading this article.&lt;br&gt;
And Congrats if you've also won this time hacktoberfest event.🎉🎉&lt;/p&gt;

&lt;h3&gt;
  
  
  Socials
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Twitter - &lt;a href="https://twitter.com/linASeervi" rel="noopener noreferrer"&gt;@linaSeervi&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub - &lt;a href="https://github.com/AnilSeervi" rel="noopener noreferrer"&gt;AnilSeervi&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Update
&lt;/h3&gt;

&lt;p&gt;I've recieved the dev.to Hacktoberfest 2021 badge and it can be seen on my profile.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>beginners</category>
      <category>opensource</category>
      <category>github</category>
    </item>
  </channel>
</rss>
