首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript范围缩减数组

Javascript范围缩减数组
EN

Stack Overflow用户
提问于 2014-05-27 11:00:18
回答 2查看 249关注 0票数 3

减少javascript中的范围的最佳方法是什么。

例如,我有

代码语言:javascript
复制
1-3,4-5,10-12,2-4

我需要的结果是

代码语言:javascript
复制
1-5, 10-12

解决这个问题的最好方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-27 11:08:34

首先,我将创建另一个没有重复项的数组,存储范围所涵盖的数字:

代码语言:javascript
复制
1-3   covers 1, 2, 3    --> [1, 2, 3]
4-5   covers 4, 5       --> [1, 2, 3, 4, 5]
10-12 covers 10, 11, 12 --> [1, 2, 3, 4, 5, 10, 11, 12]
2-4   covers 2, 3, 4    --> [1, 2, 3, 4, 5, 10, 11, 12]

然后,对数组排序:

代码语言:javascript
复制
[1, 2, 3, 4, 5, 10, 11, 12] // nothing changed in this example

最后,根据连续的值重新构建范围:

代码语言:javascript
复制
1-5
10-12
票数 1
EN

Stack Overflow用户

发布于 2014-05-27 11:21:10

1)解析输入以构建如下结构:

代码语言:javascript
复制
var rlist = [
    {min: 1, max: 3},
    {min: 4, max: 5},
    {min: 10, max: 12}
    {min: 2, max: 4}
];

2)将该列表的每一个间隔划分为一个新的列表:

代码语言:javascript
复制
var olist = [], i, j, r, p, s;
for (i = 0; i < rlist.length; ++i) {
    r = rlist[i];
    for (j = 0; j < olist.length; ) {
        p = olist[j];
        if (r.max+1 < p.min) {
            // insert here
            break;
        } else if (p.max+1 >= r.min) {
            // intersection
            olist.splice(j, 1);
            r.min = p.min;
            r.max = Math.max(r.max, p.max);
        } else {
            ++j;
        }
    }
    olist.splice(j, 0, r);
}

3)将结果转换为字符串

代码语言:javascript
复制
s = "";
for (j = 0; j < olist.length; ++j) {
    if (j > 0) {
        s += ",";
    }
    s += olist[j].min + "-" + olist[j].max;
}

小提琴

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

https://stackoverflow.com/questions/23887686

复制
相关文章

相似问题

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