Hi guys, continuing on the topic of JavaScript today, we will look at a method that can be considered the most cumbersome when working with array js that is reduce()
. In addition to the most typical example is “summing”, then what can reduce()
can do, …. Let me learn through this article.
Again, reduce()
used to execute a function on each element of the array (from left to right) with a cumulative variable to return a unique value.
- reduce () DOES NOT change the original array
- Reduce () returns the value after reduction
Syntax
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | arr <span class="token punctuation">.</span> <span class="token function">reduce</span> <span class="token punctuation">(</span> <span class="token function">callback</span> <span class="token punctuation">(</span> accumulator <span class="token punctuation">,</span> currentValue <span class="token punctuation">[</span> <span class="token punctuation">,</span> index <span class="token punctuation">[</span> <span class="token punctuation">,</span> array <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">[</span> <span class="token punctuation">,</span> initialValue <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token comment">// callback: Hàm dùng để thực thi với từng phần tử của mảng,</span> <span class="token comment">// hàm này nhận vào 4 tham số:</span> <span class="token comment">/* accumulator: Biến tích lũy, truyền giá trị trả về của mỗi lần gọi callback, nó là giá trị tích lũy được trả về trong lần gọi callback trước, hoặc giá trị của tham số initialValue, nếu được cung cấp */</span> <span class="token comment">/* currentValue: Phần tử trong mảng hiện tại đang được xử lý */</span> <span class="token comment">/* index (không bắt buộc): Chỉ mục (index) của phần tử đang được xử lý Bắt đầu tại 0 nếu giá trị initialValue được cung cấp, Bắt đầu tại 1 nếu không có initialValue */</span> <span class="token comment">/* array (không bắt buộc): Mảng đang được gọi với reduce() */</span> <span class="token comment">/* initialValue (không bắt buộc nhưng NÊN khai báo nó): Giá trị cho tham số thứ nhất (accumulator) của hàm callback trong LẦN GỌI ĐẦU TIÊN. Nếu giá trị ban đầu này không được cung cấp, phần tử đầu tiên của mảng sẽ được dùng. Do đó, gọi reduce() trên một mảng rỗng và không có giá trị ban đầu sẽ gây ra lỗi */</span> |
Here are some examples also called snippets extremely beneficial to help you during your work.
1. Calculate the sum, difference, product, quotient …
1 2 3 4 | <span class="token keyword">const</span> <span class="token function-variable function">accumulation</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token parameter"><span class="token operator">...</span> numbers</span> <span class="token punctuation">)</span> <span class="token operator">=></span> numbers <span class="token punctuation">.</span> <span class="token function">reduce</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">sum <span class="token punctuation">,</span> num</span> <span class="token punctuation">)</span> <span class="token operator">=></span> sum <span class="token operator">+</span> num <span class="token punctuation">,</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token function">accumulation</span> <span class="token punctuation">(</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token number">4</span> <span class="token punctuation">,</span> <span class="token number">5</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// > 15</span> |
2. Replace Array.prototype.reverse()
1 2 3 4 | <span class="token keyword">const</span> <span class="token function-variable function">reverseArr</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token parameter">arr <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span></span> <span class="token punctuation">)</span> <span class="token operator">=></span> arr <span class="token punctuation">.</span> <span class="token function">reduceRight</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">t <span class="token punctuation">,</span> v</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span> t <span class="token punctuation">.</span> <span class="token function">push</span> <span class="token punctuation">(</span> v <span class="token punctuation">)</span> <span class="token punctuation">,</span> t <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token function">reverseArr</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token number">4</span> <span class="token punctuation">,</span> <span class="token number">5</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// > Array [5, 4, 3, 2, 1]</span> |
3. Replace Array.prototype.map()
1 2 3 4 5 6 7 | <span class="token keyword">const</span> arr <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> a <span class="token operator">=</span> arr <span class="token punctuation">.</span> <span class="token function">map</span> <span class="token punctuation">(</span> <span class="token parameter">v</span> <span class="token operator">=></span> v <span class="token operator">*</span> <span class="token number">2</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> b <span class="token operator">=</span> arr <span class="token punctuation">.</span> <span class="token function">reduce</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">t <span class="token punctuation">,</span> v</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">[</span> <span class="token operator">...</span> t <span class="token punctuation">,</span> v <span class="token operator">*</span> <span class="token number">2</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> a <span class="token punctuation">,</span> b <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// > Array [0, 2, 4, 6] Array [0, 2, 4, 6]</span> |
4. Replace Array.prototype.filter()
1 2 3 4 5 | <span class="token keyword">const</span> a <span class="token operator">=</span> arr <span class="token punctuation">.</span> <span class="token function">filter</span> <span class="token punctuation">(</span> <span class="token parameter">v</span> <span class="token operator">=></span> v <span class="token operator">></span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> b <span class="token operator">=</span> arr <span class="token punctuation">.</span> <span class="token function">reduce</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">t <span class="token punctuation">,</span> v</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span> v <span class="token operator">></span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token punctuation">[</span> <span class="token operator">...</span> t <span class="token punctuation">,</span> v <span class="token punctuation">]</span> <span class="token operator">:</span> t <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> a <span class="token punctuation">,</span> b <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// > Array [2, 3] Array [2, 3]</span> |
5. Replace Array.prototype.some()
1 2 3 4 5 6 7 8 9 10 11 | <span class="token keyword">const</span> arr <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> score <span class="token operator">:</span> <span class="token number">10</span> <span class="token punctuation">,</span> subject <span class="token operator">:</span> <span class="token string">"a"</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> score <span class="token operator">:</span> <span class="token number">30</span> <span class="token punctuation">,</span> subject <span class="token operator">:</span> <span class="token string">"b"</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> score <span class="token operator">:</span> <span class="token number">20</span> <span class="token punctuation">,</span> subject <span class="token operator">:</span> <span class="token string">"c"</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> a <span class="token operator">=</span> arr <span class="token punctuation">.</span> <span class="token function">some</span> <span class="token punctuation">(</span> <span class="token parameter">v</span> <span class="token operator">=></span> v <span class="token punctuation">.</span> score <span class="token operator">>=</span> <span class="token number">20</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> b <span class="token operator">=</span> arr <span class="token punctuation">.</span> <span class="token function">reduce</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">t <span class="token punctuation">,</span> v</span> <span class="token punctuation">)</span> <span class="token operator">=></span> t <span class="token operator">||</span> v <span class="token punctuation">.</span> score <span class="token operator">>=</span> <span class="token number">20</span> <span class="token punctuation">,</span> <span class="token boolean">false</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> a <span class="token punctuation">,</span> b <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// > true true</span> |
6. Replace Array.prototype.every()
1 2 3 4 5 6 7 8 9 10 11 | <span class="token keyword">const</span> arr <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> score <span class="token operator">:</span> <span class="token number">10</span> <span class="token punctuation">,</span> subject <span class="token operator">:</span> <span class="token string">"a"</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> score <span class="token operator">:</span> <span class="token number">30</span> <span class="token punctuation">,</span> subject <span class="token operator">:</span> <span class="token string">"b"</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> score <span class="token operator">:</span> <span class="token number">20</span> <span class="token punctuation">,</span> subject <span class="token operator">:</span> <span class="token string">"c"</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> a <span class="token operator">=</span> arr <span class="token punctuation">.</span> <span class="token function">every</span> <span class="token punctuation">(</span> <span class="token parameter">v</span> <span class="token operator">=></span> v <span class="token punctuation">.</span> score <span class="token operator">>=</span> <span class="token number">20</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> b <span class="token operator">=</span> arr <span class="token punctuation">.</span> <span class="token function">reduce</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">t <span class="token punctuation">,</span> v</span> <span class="token punctuation">)</span> <span class="token operator">=></span> t <span class="token operator">&&</span> v <span class="token punctuation">.</span> score <span class="token operator">>=</span> <span class="token number">20</span> <span class="token punctuation">,</span> <span class="token boolean">true</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> a <span class="token punctuation">,</span> b <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// > false false</span> |
7. Find the difference between the 2 arrays
1 2 3 4 5 6 7 8 | <span class="token keyword">const</span> <span class="token function-variable function">diffItem</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token parameter">arr <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> otherArr <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span></span> <span class="token punctuation">)</span> <span class="token operator">=></span> arr <span class="token punctuation">.</span> <span class="token function">reduce</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">t <span class="token punctuation">,</span> v</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span> <span class="token operator">!</span> otherArr <span class="token punctuation">.</span> <span class="token function">includes</span> <span class="token punctuation">(</span> v <span class="token punctuation">)</span> <span class="token operator">&&</span> t <span class="token punctuation">.</span> <span class="token function">push</span> <span class="token punctuation">(</span> v <span class="token punctuation">)</span> <span class="token punctuation">,</span> t <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> a <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token number">4</span> <span class="token punctuation">,</span> <span class="token number">5</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> b <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token number">6</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token function">diffItem</span> <span class="token punctuation">(</span> a <span class="token punctuation">,</span> b <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// > Array [1, 4, 5]</span> |
8. Split up the array
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span class="token keyword">const</span> <span class="token function-variable function">chunkArr</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token parameter">arr <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> size <span class="token operator">=</span> <span class="token number">1</span></span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">return</span> arr <span class="token punctuation">.</span> length <span class="token operator">?</span> arr <span class="token punctuation">.</span> <span class="token function">reduce</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">t <span class="token punctuation">,</span> v</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span> t <span class="token punctuation">[</span> t <span class="token punctuation">.</span> length <span class="token operator">-</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> length <span class="token operator">===</span> size <span class="token operator">?</span> t <span class="token punctuation">.</span> <span class="token function">push</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> v <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token operator">:</span> t <span class="token punctuation">[</span> t <span class="token punctuation">.</span> length <span class="token operator">-</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> <span class="token function">push</span> <span class="token punctuation">(</span> v <span class="token punctuation">)</span> <span class="token punctuation">,</span> t <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">const</span> a <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token number">4</span> <span class="token punctuation">,</span> <span class="token number">5</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token function">chunkArr</span> <span class="token punctuation">(</span> a <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// > Array [[1, 2], [3, 4], [5]]</span> |
9. Contrast with the 8th guy
1 2 3 4 5 6 7 8 | <span class="token keyword">const</span> <span class="token function-variable function">flatArr</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token parameter">arr <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span></span> <span class="token punctuation">)</span> <span class="token operator">=></span> arr <span class="token punctuation">.</span> <span class="token function">reduce</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">t <span class="token punctuation">,</span> v</span> <span class="token punctuation">)</span> <span class="token operator">=></span> t <span class="token punctuation">.</span> <span class="token function">concat</span> <span class="token punctuation">(</span> Array <span class="token punctuation">.</span> <span class="token function">isArray</span> <span class="token punctuation">(</span> v <span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token function">flatArr</span> <span class="token punctuation">(</span> v <span class="token punctuation">)</span> <span class="token operator">:</span> v <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token keyword">const</span> a <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token number">4</span> <span class="token punctuation">,</span> <span class="token number">5</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token number">6</span> <span class="token punctuation">,</span> <span class="token number">7</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token number">8</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token number">9</span> <span class="token punctuation">,</span> <span class="token number">10</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token number">11</span> <span class="token punctuation">,</span> <span class="token number">12</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token function">flatArr</span> <span class="token punctuation">(</span> a <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// > Array [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]</span> |
10. Eliminate duplicate elements
1 2 3 4 5 6 7 | <span class="token keyword">const</span> <span class="token function-variable function">uniq</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token parameter">arr <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span></span> <span class="token punctuation">)</span> <span class="token operator">=></span> arr <span class="token punctuation">.</span> <span class="token function">reduce</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">t <span class="token punctuation">,</span> v</span> <span class="token punctuation">)</span> <span class="token operator">=></span> t <span class="token punctuation">.</span> <span class="token function">includes</span> <span class="token punctuation">(</span> v <span class="token punctuation">)</span> <span class="token operator">?</span> t <span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token operator">...</span> t <span class="token punctuation">,</span> v <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> a <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">0</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token function">uniq</span> <span class="token punctuation">(</span> a <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// > Array [2, 1, 0, 3]</span> |
Conclusion
It’s also quite long, reading a lot is also painful =)) I pause the article here, see you in the next section with interesting things with reduce()
If you find a good article, give me +1 upvote. If you like me, please press the follow button for more cool things. Good luck !