配列があります。可能であれば、すべての値を印刷したいのですが、間隔を入れて印刷したいと思います。例:配列からすべての値を出力しますが、間隔がある場合は書式設定してください。
[1,2,3,5,7,8,10]
私はあなたが欲しいものを理解していると思います。
"1-3、5、7-8、10"
だから、私たちは、その後、配列に1,2,3を持っている:上記の配列のために私は次の文字列を取得したいです5. 4は存在しないので、最初の間隔を閉じて文字列1-3
に追加します。この場合、間隔を作成することはできません。したがって、間隔を作成することはできません。したがって、5を追加します。次に7を、7を8に、8を10に移動してから、 。最後は10ですので、文字列に追加するだけです。結果として、
「1-3,5,7-8,10」となります。
私は次のようにこのタスクを解決:
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);
しかし、コードが理解するために非常に複雑に見えます。これを行うより良い方法はありますか?
達成したいことは明確ではありません。期待される結果についてもっと詳しく説明してください。 – sAcH
[CodeReview](http://codereview.stackexchange.com/)でこれを尋ねる必要があります。 – Xufox
@Xufox。これはコードレビューだけではありません、私が言ったように、より良い方法が存在するかもしれない、例えばアルゴリズムです。 – user348173