在考虑位数的情况下递增字符串 (0, 1, 2, .., 9, 00, 01)

Increment string with number of digits in mind (0, 1, 2, ..., 9, 00, 01)

本文关键字:字符串 情况下      更新时间:2023-09-26

我需要JavaScript中的一个函数(用于Node(,它可以递增字符串中的数字,如下所示:

"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++;
    }
}

根据我之前的回答:

function range(i, to) {
    var v,
        r = [],
        s = to,
        e = i.length,
        t = Math.pow(10, e),
        l = (t + '').length;
    i = parseInt(i);
    to = Math.pow(10, to.length);
    for (; i <= to; i++) {
        if (i === t) {
            i = 0;
            t = Math.pow(10, ++e);
            l = (t + '').length;
        }
        v = new Array(l - (i + '').length).join('0') + i;
        r.push(v);
        if (v === s) { break; }
    }
    return r;
}

使用示例:

console.log(range('05', '15').join()); // "05,06,07,08,09,10,11,12,13,14,15"
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");

这是你期待的结果吗?

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
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'

小提琴

好吧,

您可以尝试先将字符串转换为整数,然后递增 1,然后返回字符串,如下所示:

function incrementString(string){
    var number = parseInt(string);
    number++;
    return number.toString();
}
相关文章: