我有以下排序的数字数组(它们可以重复,例如 21)
let a = [1,2,3,4,7,8,12,15,21,21,22,23]
并希望获得以下(已排序)具有范围的字符串数组
let r =["1-4","7-8","12","15","21-23"]
对于连续的数字 a,a+1,a+2,...,a+n=b w 必须创建字符串 "a-b"例如对于 6,7,8 我们想要得到 "6-8", 对于 "单独”的数字,我们只想得到那个数字,例如对于上面示例中的 12,我们得到“12”。
这是我的尝试,但我坚持了下来(并且头疼)
let a = [1,2,3,6,7,8,12,15,21,21,22,23];
let right=a[0];
let left=a[0];
let result=[];
for(let i=1; i<a.length; i++) {
for(let j=1; j<a.length; j++) {
if(a[i]<a[j])result.push(`${a[i]}-${a[j]}`);
}
}
console.log(JSON.stringify(result));
最佳答案
您可以将下一个预期值存储在闭包中并减少数组。
function getRanges(array) {
return array.reduce((l => (r, v, i, a) => {
if (l[1] > v) return r;
r.push(l[1] === v
? (r.pop(), l.join('-'))
: (l = [v, v]).slice(0, 1).toString()
);
l[1]++;
return r;
})([]), []);
}
console.log(getRanges([-3, -2, -1, 2]));
console.log(getRanges([1, 2, 3, 4, 7, 8, 12, 15, 21, 21, 22, 23]));
关于javascript - 从排序的整数数组创建字符串范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54205331/