javascript - 从排序的整数数组创建字符串范围

标签 javascript grouping

我有以下排序的数字数组(它们可以重复,例如 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/

相关文章:

javascript - 我怎样才能使 Ember 操作被视为受信任的事件,以便 window.open 成功?

javascript - 调整窗口大小时无法禁用滚动功能

javascript - IE onPaste 事件使用 JavaScript 而不是 HTML

solr - Solr 分组的替代基于分数的排序

java - 如何将枚举与分组和子分组层次结构/嵌套一起使用

javascript - 如何根据下拉列表显示 id?

javascript - 新的 FormData 返回空对象

JavaScript 按数组分组

python - 如何对元组列表进行分组?

c# - 将列表分组为每组 X 项的组