1

次のように、文字列内の数値をインクリメントする JavaScript (ノードで使用するため) の関数が必要です。

"0", "1", "2", "3", ..., "8", "9", "00", "01", "02"

等々。どうすればこれを行うことができますか?多くの条件付きで長い道のりを考えることができますが、それはおそらく最適に実行されません。


私がこれまでに持っているもの:

var count = "0";

function increment() {
    var number = parseInt(count), digits = count.length;
    var upDigit = true;
    for (var i = 0; i < digits; i++) {
        if (i !== 9)
            upDigit = false;
    }
    if (upDigit) {
        var zeros = "";
        for (var i = 0; i <= digits; i++) {
            zeros += "0";
        }
        count = zeros;
    } else {
        count = number++;
    }
}
4

5 に答える 5

1
function zeroPad(str, ln){
  if(str.length > ln){ raise('Trying to zero pad a too-long string') };
  var out = str;
  while(out.length !== ln){
    out = '0'+out;
  };
  return out;
}

function iterate(previous, final){
  console.log(previous);
  if(previous === final){ return };
  var next = "";
  var ln = previous.length; // how many characters so far
  // use a regex to test if every character is 9
  var nines = 
    previous.match(/^9+$/) ? true : false;
  if(nines){
    for(var i=0; i<ln+1; i++){
      next += "0";
    }
    return iterate(next, final);
  } else {
    var value = +previous; // coerce to number
    value += 1;
    next = zeroPad(String(value), ln)
    return iterate(next, final);
  }
};

iterate("0", "000");
于 2013-10-10T16:35:53.950 に答える
1

これはあなたが期待していた結果ですか?

var e = 0,
    t = 0,
    l = 0,
    i = 0;
for (; i <= 100; i++) {
    if (i >= t) {
        i = 0;
        t = Math.pow(10, ++e);
        l = (t + '').length;
    }
    console.log(new Array(l - (i + '').length).join('0') + i);
}

パディング方法:

new Array(2).join('0') == ['', ''].join('0') == '0'; // true
于 2013-10-12T15:51:56.310 に答える
0
function pad(num) {
  return num > 0 ? pad(num-1) + "0" : ""; 
}

function add(str) {
    var len, num, numlen;
    len = str.length;
    num = +str;
    numlen = String(num).length;
    if (/^9+$/.test(num)) { return pad(len + 1); }
    else { return pad(len - numlen) + String(num + 1); }
}

add('0078') // '0079'
add('0099') // '00000'

フィドル

于 2013-10-10T16:45:50.293 に答える
-2

最初に文字列を整数に変換してから、1 ずつインクリメントしてから、次のように文字列を返すことができます。

function incrementString(string){
    var number = parseInt(string);
    number++;
    return number.toString();
}
于 2013-10-10T16:33:12.830 に答える