<?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>Forem: Steven</title>
    <description>The latest articles on Forem by Steven (@avellent).</description>
    <link>https://forem.com/avellent</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%2F1959201%2F67fcef10-6e65-452f-90bb-5319704f4107.png</url>
      <title>Forem: Steven</title>
      <link>https://forem.com/avellent</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/avellent"/>
    <language>en</language>
    <item>
      <title>Understanding Array.reduce()</title>
      <dc:creator>Steven</dc:creator>
      <pubDate>Wed, 21 Aug 2024 10:41:24 +0000</pubDate>
      <link>https://forem.com/avellent/understanding-arrayreduce-1lia</link>
      <guid>https://forem.com/avellent/understanding-arrayreduce-1lia</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;While taking a introduction course on Javascript and learning about all of the different methods of the Arrays. I did not quite understand the real power of the reduce method and it is only after going back to it a second time that I am now realising how truly useful this method is. I hope the article might make it clearer for some about how this method works and when to use it.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Method
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;Array.prototype.reduce(callbackFunction)&lt;/code&gt;&lt;br&gt;
&lt;code&gt;Array.prototype.reduce(callbackFunction, initialValue)&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What exactly does this method do?
&lt;/h2&gt;

&lt;p&gt;The reduce() method processes each element of an array using a callback function, accumulating the result into a single value. If an initial value is provided, it's used as the starting point; otherwise, the first array element is used, and the iteration starts from the second element.&lt;/p&gt;
&lt;h2&gt;
  
  
  Callback Function Parameters
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;callbackFunction(accumulator, currentValue, currentIndex, array){}&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  accumulator
&lt;/h4&gt;

&lt;p&gt;The accumulated result from the previous iteration or the initial value if provided.&lt;/p&gt;
&lt;h4&gt;
  
  
  currentValue
&lt;/h4&gt;

&lt;p&gt;The value of the current array element being processed.&lt;/p&gt;
&lt;h4&gt;
  
  
  currentIndex
&lt;/h4&gt;

&lt;p&gt;The index of the current element, starting at 0 if an initial value is provided, otherwise 1.&lt;/p&gt;
&lt;h4&gt;
  
  
  array
&lt;/h4&gt;

&lt;p&gt;The array on which the reduce() method is being executed.&lt;/p&gt;
&lt;h2&gt;
  
  
  Initial Value
&lt;/h2&gt;

&lt;p&gt;When using the reduce method without a initial value, the callback function will take the first element of the array and initialize it as the accumulator and then iterate through the rest of the array.&lt;/p&gt;
&lt;h1&gt;
  
  
  Use cases
&lt;/h1&gt;

&lt;p&gt;The most common example you will encounter using the reduce method is  the sum of an array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const ages = [23, 15, 45, 13, 66, 54, 38];
let sumOfAges = ages.reduce(function(sumOfAges, currentAge){
    sumOfAges = sumOfAges + currentAge;
    return sumOfAges;
}); // 254
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While yes this is exactly what the reduce method is good for and good at, there is a lot more it can do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting the max age of a group
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const ages = [23, 15, 45, 13, 66, 54, 38];
let oldestPerson = ages.reduce(function(maxAge, currentAge){
    if(currentAge&amp;gt;maxAge){
        maxAge = currentAge;
    }
    return maxAge;
}); // 66
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we are using the reduce method to save the highest age that we are encountering in the array and returning that value once iterated through the whole array.&lt;/p&gt;

&lt;h2&gt;
  
  
  Removing Duplicates in a Array
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const store = ['apple', 'pear', 'apple', 'orange', 'apple', 'pear'];
let itemCatalogue = store.reduce(function(uniqueStoreItems, currentItem){
    if(!uniqueStoreItems.includes(currentItem)){
        uniqueStoreItems.push(currentItem);
    }
    return uniqueStoreItems;
}, []); // ['apple', 'pear', 'orange']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt; to note here that for the initial value in the reduce method we are supplying an empty array, []. This means that the accumulator is now an array, and our call back function pushes only items that are not already in that array. As a result we have removed duplicates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting a Count of Items in a Array
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const store = ['apple', 'pear', 'apple', 'orange', 'apple', 'pear'];
let itemCount = store.reduce(function(count, currentItem){
    count[currentItem] = (count[currentItem] || 0) + 1;
    return count;
}, {}); // { apple: 3, pear: 2, orange: 1 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt; to note here is that the initial value is an empty object. As we go through the items in the store, we populate the item with the count.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;First of all if you've made it this far thanks for the read! My main goal for writing this article was for me to solidify my understanding of the reduce method and I hope that maybe you learned something new here too! The reduce method has a lot of really cool applications and is really neat to use. Have you got any other use cases or fun tricks with the method? I would love to know!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
