Javascript 检查数组中的数字是否连续并存储它们?
Javascript check if numbers in an array are consecutive and store them?
我有一个这样的数组:
arr = [1,3,4,5,7,8]
我需要检查下一个数字是否与当前数字连续,如果是,则将两者存储在一起,否则我将单个数字存储在数组中。
上面的数组应该给出以下结果:
newArray = [1, 345, 78]
我尝试了一个简单的解决方案,只有在只有 2 个连续数字的情况下才能实现我想要的:
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]);
}
}
当我尝试做更多的数字时,事情变得非常混乱。
我知道这看起来不是什么大问题,但我试了好几个小时却找不到结果。
你可以这样做
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))
我有一个这样的数组:
arr = [1,3,4,5,7,8]
我需要检查下一个数字是否与当前数字连续,如果是,则将两者存储在一起,否则我将单个数字存储在数组中。
上面的数组应该给出以下结果:
newArray = [1, 345, 78]
我尝试了一个简单的解决方案,只有在只有 2 个连续数字的情况下才能实现我想要的:
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]);
}
}
当我尝试做更多的数字时,事情变得非常混乱。
我知道这看起来不是什么大问题,但我试了好几个小时却找不到结果。
你可以这样做
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))