# early break reduce()

{% tabs %}
{% tab title="💈範例" %}
codepen ⟩ [early break reduce()?](https://codepen.io/lochiwei/pen/PoKqQBL?editors=0012)

```javascript
const {log} = console;

//                0        1          2          3
const array = ['apple', '-pen', '-pineapple', '-pen'];

// early break reduce()
const x = array  
  .slice(0)                           // ⭐️ copy of "array"             
  .reduce((acc, curr, i, arr) => {
      if (i === 2) arr.splice(i+1);   // ⭐️ eject early by mutating `arr` 
      return (acc += curr);           //   (array copy)
  }, '');

log(x);                               // "apple-pen-pineapple"
```

{% endtab %}

{% tab title="📘 手冊" %}

* Array.prototype ⟩&#x20;
  * .[reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)()
  * .[slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice)() - 擷取某一段，產生**新陣列**。
  * .[splice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)() - 截斷**原陣列**、插入新元素。(⭐️ 注意：會回傳「**被截掉的部分**」❗️)
    {% endtab %}

{% tab title="📗 參考" %}

* [x] JS.info ⟩ [reduce(), reduceRight()](https://javascript.info/array-methods#reduce-reduceright)
  {% endtab %}

{% tab title="🗣 討論" %}

* [How to early break reduce() method?](https://stackoverflow.com/a/47441371/5409815)
  {% endtab %}
  {% endtabs %}
