Javascript自动增量索引

时间:2015-02-26 16:10:18

标签: javascript

我需要创建一个函数或者如果可能已经创建的库来自动递增索引。例如,如果它以'A'开头,则必须递增到'Z',并且在'Z'之后它必须从'A1'开始并且一旦开始。 。 。'B1','C1',......'Z1','A2','B2',......是否存在这样的事情?

我的想法是这样,但从'A'开始并且不添加数字。 。

function nextChar(cont,letter) {


if (cont === 0){return letter;}
else {


letter=letter.charCodeAt(0) + 1;

return String.fromCharCode(letter);

   }

}

4 个答案:

答案 0 :(得分:1)

众多选择之一:

function nextIndex(idx) {
  var m = idx.match(/^([A-Z])(\d*)$/)
  if(!m)
    return 'A';
  if(m[1] == 'Z')
    return 'A' + (Number(m[2] || 0) + 1);
  return String.fromCharCode(m[1].charCodeAt(0) + 1) + m[2];
}

var a = "";
for(i = 0; i < 100; i++) {
  a = nextIndex(a)
  document.write(a + ", ")
}

答案 1 :(得分:0)

这个效率低于georg,但乍看之下可能更容易理解:

for (var count = 0, countlen = 5; count < countlen; count++) {
    for (var i = 65, l = i + 26; i < l; i++) {
        console.log(String.fromCharCode(i) + (count !== 0 ? count : ''));
    }
}

DEMO

答案 2 :(得分:0)

请允许我提出一个更面向对象的解决方案:

function Index(start_with) {
    this.reset = function(reset_to) {
        reset_to = reset_to || 'A';
        this.i = reset_to.length > 1 ? reset_to[1] : 0; // needs more input checking
        this.c = reset_to[0].toUpperCase(); // needs more input checking
        return this;
    };

    this.inc = function(steps) {
        steps = steps || 1;
        while(steps--) {
            if (this.c === 'Z') {
              this.i++;
              this.c = 'A';
            } else {
              this.c = String.fromCharCode(this.c.charCodeAt(0) + 1);
            }
        }
        return this;
    };

    this.toString = function() {
        if (this.i === 0) return this.c;
        return this.c + '' + this.i;
    };

    this.reset(start_with);
}

var a = new Index(); // A
console.log('a = ' + a.inc(24).inc().inc()); // Y, Z, A1
var b = new Index('B8'); // B8
console.log('a = ' + a.reset('Y').inc()); // Y, Z
console.log('b = ' + b); // B8

答案 3 :(得分:0)

另一种思考方式是你的&#34; A1&#34; index只是整数的自定义呈现:0 =&#39; A&#39;,1 =&#39; B&#39;,26 =&#39; A1&#39;等

因此,您还可以重载Number对象以呈现索引。最大的好处是所有的数学运算仍然有效,因为你总是处理数字:

Number.prototype.asIndex = function() {
    var n = this;
    var i = Math.floor(n / 26);
    var c = String.fromCharCode('A'.charCodeAt(0) + n % 26);
    return '' + c + (i ? i : '');   
}
Number.parseIndex = function(index) {
    var m;
    if (!index) return 0;
    m = index.toUpperCase().match(/^([A-Z])(\d*)$/);
    if (!m || !m[1]) return 0;
    return Number((m[1].charCodeAt(0) - 'A'.charCodeAt(0)) + 26 * (m[2] ? m[2] : 0));
};

var c = 52;
var ic = c.asIndex();
var nc = Number.parseIndex(ic);
console.log(c+' = '+ic+' = '+nc); // 52 = A2 = 52

如果你走这条路,我会试着检查一下新方法是否已经存在......