首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印数组中的所有值,但如果有间隔,则使用格式。

打印数组中的所有值,但如果有间隔,则使用格式。
EN

Stack Overflow用户
提问于 2016-12-21 08:57:54
回答 2查看 74关注 0票数 1

我有一系列的数字。我想打印所有的值,但如果可能的话,要有间隔。例如:

代码语言:javascript
复制
[1,2,3,5,7,8,10]

我想你会明白我的榜样想要得到什么。对于上面的数组,我想得到以下字符串:

"1-3,5,7-8,10“

因此,我们在数组中有1,2,3,然后5。4不存在,所以我们关闭第一个间隔,并添加到字符串1-3。然后继续,在5到7之后。在这种情况下,我们不能创建间隔,因此我们只是添加5。然后继续,我们有7,7后8,8后10,所以我们只能创建7-8间隔。10是最后一个,所以我们把它加到字符串中。因此,我们有:

"1-3,5,7-8,10“。

我用以下方法解决了这一任务:

代码语言:javascript
复制
let numbers = [1,2,3,4,7,9,12,13];

numbers.sort((a,b) => {return a - b});
let str='';
let startIndex =0, start, end;
if(numbers.length === 1) {
  str = `${numbers[0]}`;
}

for(let i=0; i< numbers.length; i++) {
  if(i === 0) {
    continue;
  }

  if(numbers[i-1] +1 !== numbers[i]) {   
    start = numbers[startIndex];
    end = numbers[i -1];
    if(start - end === 0) {
      str += `${start},`;
    }
    else {
       str += `${start} - ${end},`;
    }

    startIndex = i;

  } 

  if(i+1 === numbers.length) {
    start = numbers[startIndex];
    end = numbers[i];
    if(start - end === 0) {
      str += `${numbers[i]}`;
    } else {
           str += `${numbers[startIndex]} - ${numbers[i]}`;
    }
  }

}

console.log(str);

但是,代码看起来非常复杂,难以理解。有更好的方法吗?

演示

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-21 09:13:28

您可以用它们的前身测试这些项目,并将其移到正确的组中。

代码语言:javascript
复制
var data = [1, 2, 3, 5, 7, 8, 10],
    result = data.reduce(function (r, a, i, aa) {
        if (aa[i - 1] === a - 1) {
            r[r.length - 1][1] = a;
        } else {
            r.push([a]);
        }
        return r;
    }, []).map(a => a.join('-')).join(', ');

console.log(result);

票数 2
EN

Stack Overflow用户

发布于 2016-12-21 09:16:33

下面是一个函数,它将一个(排序的)数组转换为一个对(范围)数组。

代码语言:javascript
复制
let rangify = function(xs) {
    let ranges = [];
  
    for (let x of xs) {
        let last = ranges[ranges.length - 1];
  
        if (!last || x > last[1] + 1)
            ranges.push([x, x])
        else
            last[1]++;
    }
  
    return ranges;
};


let r = rangify([1,2,3,5,7,8,10,11,12,13,77,78]);
console.log(r)

很明显,如何从中获得所需的输出是显而易见的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41258755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档