为了账号安全,请及时绑定邮箱和手机立即绑定

如何在排序的数字列表中合并连续数字?

如何在排序的数字列表中合并连续数字?

叮当猫咪 2019-05-02 22:19:29
我想在可读字符串中连接一系列数字。应该像这样合并连续的数字'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的片段的简短版本: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));
查看完整描述

2 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

这应该工作:


var array = [1, 2, 3, 4, 7, 8, 9, 13, 16, 17];


var ranges = [];

var index = 0;

while (index < array.length) {

    var rangeStartIndex = index;

    while (array[index + 1] === array[index] + 1) {

        // continue until the range ends

        index++;

    }


    if (rangeStartIndex === index) {

        ranges.push(array[index]);

    } else {

        ranges.push(array[rangeStartIndex] + " - " + array[index]);

    }

    index++;

}


console.log(ranges.join(", "));


查看完整回答
反对 回复 2019-05-17
  • 2 回答
  • 0 关注
  • 683 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信