【发布时间】:2019-05-16 16:48:24
【问题描述】:
我想连接一个可读字符串中的数字序列。连续的数字应该像这样合并'1-4'。
我能够将一个包含所有数字的数组连接成一个完整的字符串,但我在组合/合并连续数字时遇到了麻烦。
我尝试使用多个if-条件将前一个值和下一个值与循环中的当前值进行比较,但我似乎找不到合适的值使其正常工作。
例子:
if(ar[i-1] === ar[i]-1){}
if(ar[i+1] === ar[i]+1){}
我的代码如下所示:
var ar = [1,2,3,4,7,8,9,13,16,17];
var pages = ar[0];
var lastValue = ar[0];
for(i=1; i < ar.length; i++){
if(ar[i]-1 === lastValue){
pages = pages + ' - ' + ar[i];
}else{
pages = pages + ', ' + ar[i];
}
}
alert(pages);
结果是:1 - 2, 3, 4, 7, 8, 9, 13, 16, 17
最后应该是这样的:1-4, 7-9, 13, 16-17。
编辑: 我在我的脚本中使用了@CMS 链接上的第一个答案。看起来很像 @corschdi 的 sn-p 的较短版本:
var ar = [1,2,3,4,7,8,9,13,16,17];
var getRanges = function(array) {
var ranges = [], rstart, rend;
for (var i = 0; i < array.length; i++) {
rstart = array[i];
rend = rstart;
while (array[i + 1] - array[i] == 1) {
rend = array[i + 1]; // increment the index if the numbers sequential
i++;
}
ranges.push(rstart == rend ? rstart+'' : rstart + '-' + rend);
}
return ranges;
}
alert(getRanges(ar));
【问题讨论】:
标签: javascript arrays numbers concatenation