# Why does this interval merge function duplicate the last range?

**URL:** <https://forum.kirupa.com/t/why-does-this-interval-merge-function-duplicate-the-last-range/679919>\
**Category:** web dev\
**Created:** [April 3, 2026, 9:00am UTC](https://forum.kirupa.com/t/why-does-this-interval-merge-function-duplicate-the-last-range/679919 "2026-04-03T09:00:12Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yoshiii](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/yoshiii/32/31156_2.png) [@Yoshiii](https://forum.kirupa.com/u/Yoshiii)\
**Post date:** [April 3, 2026, 9:00am UTC](https://forum.kirupa.com/t/why-does-this-interval-merge-function-duplicate-the-last-range/679919/1 "2026-04-03T09:00:12Z")

</div>

I’m merging sorted half-open intervals, but some inputs repeat the final range in the output. I expected adjacent ranges to merge too. What logic bug am I missing?

```js
function merge(intervals) {
  const out = [];
  for (const cur of intervals) {
    const last = out[out.length - 1];
    if (!last || cur[0] > last[1]) out.push(cur);
    if (cur[0] <= last?.[1]) {
      last[1] = Math.max(last[1], cur[1]);
      out.push(last);
    }
  }
  return out;
}

```

Yoshiii 🙂

---

<div class="post-metadata">

**Author:** ![WaffleFries](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/wafflefries/32/31185_2.png) [@WaffleFries](https://forum.kirupa.com/u/WaffleFries)\
**Post date:** [April 3, 2026, 9:14am UTC](https://forum.kirupa.com/t/why-does-this-interval-merge-function-duplicate-the-last-range/679919/2 "2026-04-03T09:14:06Z")

</div>

Your merge branch is pushing twice: once for a new interval and again after extending `last`, so the same array reference gets appended again.

WaffleFries
