首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用范围拆分这串数字?

如何使用范围拆分这串数字?
EN

Stack Overflow用户
提问于 2016-12-16 17:44:48
回答 5查看 606关注 0票数 0

我有一串这样的数字:

代码语言:javascript
复制
var string= "1,2,3,4-8,15,17,18-21,22";

如何将其拆分为一个数组,该数组的形式为:[1,2,3,4,5,6,7,8,15,17,18,19,20,21,22]

更新:好的,代码马上就要出来了……试着拉起一把jsfiddle。

代码语言:javascript
复制
var mystring= "1,2,3,4-8,15,17,18-21,22";

var array1= mystring.split(",");
document.getElementById("output").innerHTML=array1;
var array2 = searchStringInArray ("-", array1);
document.getElementById("output2").innerHTML=array2;


function searchStringInArray (str, strArray) {
    for (var j=0; j<strArray.length; j++) {
        if (strArray[j].match(str)) return j;
    }
    return -1;
}

所以在这里我被卡住了,我想应该有更好的方法。我知道您必须在数组中搜索连字符拆分字符串。但我无法将它们放入另一个数组中,然后我可以将它们插入到第一个数组中。

https://jsfiddle.net/08au43ka/

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-12-16 17:52:45

代码语言:javascript
复制
var string= "1,2,3,4-8,15,17,18-21,22";
var arr=string.split(",");
var crr=[];
arr.forEach(function(a){
  brr= a.split("-");
  if(brr.length==2){
    var o=parseInt(brr[0]);
    var p=parseInt(brr[1]);
  for(var i=o;i<=p;i++)
    crr.push(i);
  }
  else
  crr.push(parseInt(brr[0]));
})
console.log(crr);

票数 3
EN

Stack Overflow用户

发布于 2016-12-16 17:54:27

您可以先用逗号拆分,然后再用减号拆分,然后将整个数组减少到一个新的数组中,该数组带有一个用于缺失值的内部循环。

代码语言:javascript
复制
var string = "1,2,3,4-8,15,17,18-21,22",
    result = string.split(',').reduce(function (r, a) {
        var b = a.split('-').map(Number);
        do {
            r.push(b[0]);
            b[0]++;
        } while (b[0] <= b[1]);
        return r;
    }, []);
        
console.log(result);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 2
EN

Stack Overflow用户

发布于 2016-12-16 17:56:47

您可以只替换范围:

代码语言:javascript
复制
var string = "1,2,3,4-8,15,17,18-21,22"

var regexRanges = /(\d+)-(\d+)/g;
var getRangeValues = function(range, start, end) {
    return Array(end - start + 1).fill(+start).map((x, i)=> x + i);
};

var result = JSON.parse('[' + string.replace(regexRanges, getRangeValues) + ']');
console.log(result);

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

https://stackoverflow.com/questions/41181387

复制
相关文章

相似问题

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