将excel列字母表(例如AA)转换为数字(例如,25)

Jai*_*tus 15 javascript

在我的网格中,列标题A,B,C...,AA,AB,AC,...像excel电子表格一样被命名.如何将字符串转换为数字,如:A => 1, B => 2, AA => 27

Yos*_*shi 39

尝试:

var foo = function(val) {
  var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, j, result = 0;

  for (i = 0, j = val.length - 1; i < val.length; i += 1, j -= 1) {
    result += Math.pow(base.length, j) * (base.indexOf(val[i]) + 1);
  }

  return result;
};

console.log(['A', 'AA', 'AB', 'ZZ'].map(foo)); // [1, 27, 28, 702]
Run Code Online (Sandbox Code Playgroud)


iMo*_*ses 7

这是您应该实现的代码的快速示例.这适用于任何给定数量的字母.

function letterToNumbers(string) {
    string = string.toUpperCase();
    var letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', sum = 0, i;
    for (i = 0; i < string.length; i++) {
        sum += Math.pow(letters.length, i) * (letters.indexOf(string.substr(((i + 1) * -1), 1)) + 1);
    }
    return sum;
}
Run Code Online (Sandbox Code Playgroud)


cui*_*ing 7

解决方案1:最佳性能和浏览器兼容性

// convert A to 1, Z to 26, AA to 27
function lettersToNumber(letters){
    var chrs = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ', mode = chrs.length - 1, number = 0;
    for(var p = 0; p < letters.length; p++){
        number = number * mode + chrs.indexOf(letters[p]);
    }
    return number;
}
Run Code Online (Sandbox Code Playgroud)

解决方案2:最佳性能和兼容性以及更短的代码(推荐)

// convert A to 1, Z to 26, AA to 27
function lettersToNumber(letters){
    for(var p = 0, n = 0; p < letters.length; p++){
        n = letters[p].charCodeAt() - 64 + n * 26;
    }
    return n;
}
Run Code Online (Sandbox Code Playgroud)

解决方案3:短代码(es6箭头功能)

// convert A to 1, Z to 26, AA to 27
function lettersToNumber(letters){
    return letters.split('').reduce((r, a) => r * 26 + parseInt(a, 36) - 9, 0);
}
Run Code Online (Sandbox Code Playgroud)

测试:

['A', 'Z', 'AA', 'AB', 'ZZ','BKTXHSOGHKKE'].map(lettersToNumber);
// [1, 26, 27, 28, 702, 9007199254740991]

lettersToNumber('AAA'); //703
Run Code Online (Sandbox Code Playgroud)