Javascript check if numbers in an array are consecutive and store them?

I have an array like this:

arr = [1,3,4,5,7,8]

I need to check if the next number is consecutive to the current number and, if it is, store both together otherwise i store the single number in an array.

The above array should give the following result:

newArray = [1, 345, 78]

I tried a simple solution and only achieve what i wanted if was only 2 consecutive numbers:

for (i = 0; i < array.length; i++) {
    if (array[i] === array[i - 1] + 1) {
        newArray.push(array[i - 1] + array[i]);
    } else {
        newArray.push(array[i]);
    }
}

And when i tried to do for more numbers things got very messy.

I know this doesnt look like a major problem, but i am trying this for hours and cant find the result.

>Solution :

You can do something like this

const arr = [1,3,4,5,7,8]

const groupConsecutive = arr => {
 const result = arr.reduce((res, n) => {
  if(n - res.prev === 1){
    return {
      prev: n,
      current: [...res.current, n.toString()],
      total: res.total
    }
  }
  return {
    prev: n,
    current: [n.toString()],
    total: [...res.total, res.current]
  }

}, {prev: '', current: [], total: []})
 return [...result.total, result.current].flatMap(n => Number(n.join('')))
}

console.log(groupConsecutive(arr))

Leave a Reply