day152-找出有序数组中连续的数

题目

找出有序数组中连续的数,并按一定规则排列。
(这个题来自今天的需求,要求选中一些指定的图片。且可以利用范围来选择。)
input:[1, 3, 4, 10, 25, 26, 30, 31, 32, 33]
output:1,3-4,10,25-26,30-33

分析

每一个数,找出每个数和该数的下一个数加一是不是相等。
利用“游标”的方法,挨个查找。

题解

function compressArr (sortedArr) {
// 必须是有序数组
let start = sortedArr[0]
let stop = start
let arrLength = sortedArr.length // 注意这里sortedArr,如果是定义变量arr,则会变量提升
let resultStr = ''

for (let i = 1; i < arrLength; i++) {
// 等于前一个连续的值+1,即:连续值
if (sortedArr[i] === stop + 1) {
// 指向下一个元素
stop = sortedArr[i]
} else {
if (start === stop) {
resultStr += start + ','
} else {
resultStr += start + '-' + stop + ','
}
// 重新初始化start和stop指向
start = sortedArr[i]
stop = start
}
}
// 处理最后的数
if (start === stop) {
resultStr += start
} else {
resultStr += start + '-' + stop
}
return resultStr
}
文章作者: lmislm
文章链接: http://lmislm.com/2019/06/14/2019-06-14/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog