2017-08-31 4 views
2
Case 1: 
input: 145 
output: 146 

Case 2: 
input 199 
output 1001 

Case 3: 
input: 59 
output 501 

Case 4: 
input: 99 
output: 901 

最初の数字は変更しないでください。数字を大きくしても常に最初の数字を保持する

理由は最初の数字は分類(1-9)です。続く数字は通し番号です。

だから、199は分類 '1'と通し番号99です。次の通し番号は1001です。奇妙な論理を取り除く(私はこれを決断しませんでした)。

これを行うスマートな方法はありますか?

+2

ケース#4と「*最初の数は決して変更しないでください」*とはどのように調整しますか? –

+2

ケース2を取得しません。199 + 1 => 200 =>最初の数字=> 100を維持する –

+0

@ PM77-1、それは9 – Per

答えて

3

は、数値を文字列に変換します。最初の数字を文字列の最初の文字として取得し、残りを残りの文字として取得します。残りの部分がすべて9の場合は、それを0の+1に増やします。それ以外の場合は1を追加します。そして、私たちは関数の最初のパラメータとして、整数、numberを取り、元の最初のdigitl

function increment_serial(input) { 
 
    var str = input.toString(); 
 
    var first = str[0]; 
 
    var rest = str.substr(1); 
 
    if (rest.match(/^9+$/)) { 
 
    var newrest = rest.replace(/9/g, '0') + '1'; 
 
    } else { 
 
    newrest = parseInt(rest, 10) + 1; 
 
    } 
 
    return first + newrest; 
 
} 
 

 
console.log(increment_serial(145)); 
 
console.log(increment_serial(199)); 
 
console.log(increment_serial(59)); 
 
console.log(increment_serial(99));

0

は、2つの変数、接頭辞と番号を持っている:

var prefix = "5"; 
var number = 99; 
var output = prefix + number; 
alert(output); 
number = number + 1; 
output = prefix + number; 
alert(output); 

そして、ここではフィドルです:https://jsfiddle.net/xedret/0ujgjsbj/

+1

デモ用にjsfiddleの代わりにStack Snippetを使用してください。 – Barmar

0

function incrementNumberLeavingFirst(number) { 
 
    var numberAsString = number+""; 
 
    incrementedNumber = parseInt(numberAsString.slice(1))+1 
 
    return parseInt(numberAsString[0]+incrementedNumber); 
 
} 
 

 
alert(incrementNumberLeavingFirst(599))

でこれをバック連結します。これは増分したい数値です。

JavaScript内の整数に文字列を追加すると、整数が文字列に変換されるため、空の文字列を追加して文字列のnumberパラメータを取得し、変数numberAsStringに格納します。

次に、numberAsString.slice(1)を使用して最初の文字以外の文字列をすべて取り出し、parseIntを使用して整数に変換して1つを追加します。これにより、数値がインクリメントされます(最初の桁を除く)。インクリメントした数値をincrementedNumberという変数に格納します。

最後に、数字の最初の数字をインクリメントした数字に連結します(最初の数字はまだ文字列なので、incrementedNumberを文字列に変換して最初の数字を文字列の先頭に追加します)。 parseIntを使用して全体を整数に変換して返します

関連する問題