我有数据阵列Ex。 var arr = [1,2,3,4,5,7,8,10,11,12,15]
。
如果数据序列的数组与超过两位数的范围匹配。我想在上面显示上面的数据数组。
result = [1-5,7,8,10-12,15]
。
任何人都可以帮助我如何在JavaScript中实现上述结果。
答案 0 :(得分:1)
您可以检查数字是否在范围内,更改最后一个字符串或将值推送到结果集。
1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 15 ^ no predecessor, push value + ^ + predecessor and successor, change last value + + ^ predecessor and previous predecessor, change last
var array = [1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 15],
result = [];
array.forEach(function (a, i, aa) {
result.push(aa[i - 1] + 1 === a && (aa[i - 2] + 1 === aa[i - 1] || a + 1 === aa[i + 1])
? [result.pop().split('-')[0], a].join('-')
: a.toString());
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
一种方法
function getRanges(array) {
let ranges = [], rstart, rend;
for (let i = 0; i < array.length; i++) {
rstart = array[i];
rend = rstart;
while (array[i + 1] - array[i] == 1) {
rend = array[i + 1];
i++;
}
ranges.push(rstart == rend ? rstart+'' : rstart + '-' + rend);
}
return ranges;
}
const range1 = getRanges([1,2,3,4,5,7,8,10,11,12,15]);
console.log(range1);
const range2 = getRanges([1,2,3,5,7,9,10,11,12,14 ]);
console.log(range2);
const range3 = getRanges([1,2,3,4,5,6,7,8,9,10])
console.log(range3);