我想在可读字符串中连接一系列数字。应该像这样合并连续的数字'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(", "));
添加回答
举报
0/150
提交
取消