Getting a stack overflow in this array merge

57 Views Asked by At

I've written a short recursive function to add blank entries every 30 minutes to a dataset. As far as I can tell, the function should be tail-recursive, but it seems to cause a stack overflow.

Just looking at it, I can't work out what I've done wrong. Any advice would be welcome.

        function mergeHelper(memo, merge, latestTime) {
          var currentTime = moment(latestTime.subtract(30, "minutes")),
            mergeTime = moment(merge[0]),
            thisElement = [currentTime, 0],
            actualTime;

          if (!merge.length) { //base case
            return memo;
          }

          if (mergeTime.isAfter(currentTime)) { // normal case
            memo.push(merge.pop);
            actualTime = mergeTime.clone();
          } else { // failthrough case
            memo.push(thisElement);
            actualTime = currentTime.clone();
          }
          return mergeHelper(memo, merge, actualTime);
        }

        return mergeHelper([], data, initialTime);
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment.js"></script>

0

There are 0 best solutions below