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.
CodePudding user response:
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))