2016-12-16 12 views
0

私はこのような数字の文字列を持っている:この文字列を範囲で分割するにはどうすればよいですか?

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]

UPDATE:さて、コードをしようと...少しだけで来ますjsfiddleを手に入れよう。

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/

+1

まだコードを書いていませんか? – Erik

+1

何を試しましたか?あなたのテストではうまくいかなかったのですか?いくつかのコードを掲示してエラーを説明すれば、人々は逃げ出して助けてくれるかもしれません。 –

答えて

3

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);

+1

あなたは説明が不足している、私はコードがない、我々は良いチームを形成するだろう... – Raimonds

+1

あなたは説明が良いですか? – Mahi

+0

あなたのコメントはまさに私が書いたのと全く同じことです:)偉大な解決策 – Raimonds

0

私はあなたが最も可能性の高いあなた自身を記述する必要があります欲しいものを達成するための既知の方法がありませんので。

私はコンマでその文字列を分割していましたが、ダッシュを含んでいれば配列を繰り返し処理していましたが、その配列アイテムを解析して解析すると、 が得られます。 i = leftからi<rightまで、アイテムを元の配列にプッシュします。

2

その後、マイナスで、カンマで最初に分割して、欠損値のための内部ループを使用して新しい配列に全体を減らすことができます。

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

私はあなたが整数に解析された方法が好きです。 – Mahi

1

var string= "1,2,3,4-8,15,17,18-21,22"; 
 
var chunks = string.split(","); 
 
var numbers = []; 
 
for (var i = 0; i < chunks.length; i++) { 
 
    var chunk = chunks[i]; 
 
    if (chunk.indexOf('-') < 0) { 
 
    numbers.push(parseInt(chunk)); 
 
    } 
 
    else { 
 
    var pair = chunk.split('-'); 
 
    for (var j = pair[0]; j <= pair[1]; j++) { 
 
     numbers.push(parseInt(j)); 
 
    } 
 
    } 
 
} 
 
console.log(numbers);

2

あなただけの範囲を置き換えることができます。

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);

+1

番号配列を取得するのに 'JSON.parse'を使用しないのはなぜですか? –

+0

@ NinaScholz。良いアイデア!!ありがとう –

関連する問題