-5

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.

1

1 Answer 1

1

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))

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.