【问题标题】:How to convert letters to numbers with Javascript?如何使用 Javascript 将字母转换为数字?
【发布时间】:2014-03-25 02:27:55
【问题描述】:

如何在 JavaScript 中将字母转换为对应的数字?

例如:

a = 0
b = 1
c = 2
d = 3

我在converting numbers to letters beyond the 26 character alphabet 上发现了这个问题,但它要求的恰恰相反。

有没有办法在没有庞大数组的情况下做到这一点?

【问题讨论】:

  • 对,但为什么是A?为什么不'a' 其他角色?另外,所有的字符都是ASCII吗?
  • @mgilson - 抱歉,应该是小写的。这些字符只是我要转换的字符串变量。

标签: javascript


【解决方案1】:

您可以使用String.prototype.charCodeAt 从字符串中的任何索引获取代码点*。如果你的字符串是单个字符,你需要索引0,而a的代码是97(很容易从JavaScript中获得'a'.charCodeAt(0)),所以你可以这样做:

s.charCodeAt(0) - 97

如果您想反过来,String.fromCharCode 采用 Unicode 代码点*并返回一个字符串。

String.fromCharCode(97 + n)

* not quite

【讨论】:

  • n 来自哪里?
  • @fizzix 来自...你。您指定n。如果要自动弹出数组或 w/e,可以执行 0 到 25 的循环
  • 所以n可以从myLetter.charCodeAt(0)找到?
  • @fizzix,你说你想把一个数字转换成它对应的字母,所以n就是那个数字。 String.fromCharCode(97 + 3) === 'c',例如..
  • @fizzix:那就是c.charCodeAt(0) - 97。 =)
【解决方案2】:

抱歉,我还以为是反方向。

试试这个:

var str = "A";
var n = str.charCodeAt(0) - 65;

【讨论】:

  • 使用“-97”而不是“-65”来表示小写“a”等于0
【解决方案3】:

这个很短,支持大写和小写。

const alphaVal = (s) => s.toLowerCase().charCodeAt(0) - 97 + 1

【讨论】:

  • 为什么不只是const alphaVal = (s) => s.toLowerCase().charCodeAt(0) - 96
  • 有些答案是 97,为什么是 96?
  • @ToivoSäwén 如果您希望将 a 分配给 1,则使用 96,如果您希望将 a 分配给 0,则使用 97。
【解决方案4】:

如果您希望能够处理像AA 这样的超过 26 个字母的 Excel,那么您可以使用以下改编自 this question 的函数:

function convertLetterToNumber(str) {
  var out = 0, len = str.length;
  for (pos = 0; pos < len; pos++) {
    out += (str.charCodeAt(pos) - 64) * Math.pow(26, len - pos - 1);
  }
  return out;
}

堆栈片段中的演示:

function convertLetterToNumber(str) {
  var out = 0, len = str.length;
  for (pos = 0; pos < len; pos++) {
    out += (str.charCodeAt(pos) - 64) * Math.pow(26, len - pos - 1);
  }
  return out;
}

var testCase = ["A","B","C","Z","AA","AB","BY"];

var converted = testCase.map(function(obj) {
  return {
    letter: obj,
    number: convertLetterToNumber(obj)
  };

});

console.table(converted);

【讨论】:

    【解决方案5】:

    您可以将 1 分配给“a”,而不是 0, 以便轻松跳过(或包含)标点符号、数字或大写字母。

    function a1(txt, literal){
        if(!literal) txt= txt.toLowerCase();
        return txt.split('').map(function(c){
            return 'abcdefghijklmnopqrstuvwxyz'.indexOf(c)+1 || (literal? c: '');
        }).join(' ');
    }
    

    var str= '你好,世界!';

    /*  a1(str,'literal')>>value: (String)
    H 5 12 12 15   1 7 1 9 14 ,   23 15 18 12 4 !
    */
    
    
    /*  a1(str) >>value: (String)
    8 5 12 12 15  1 7 1 9 14   23 15 18 12 4 
    */
    

    【讨论】:

      【解决方案6】:

      您可以创建一个映射值的对象:

      function letterValue(str){
          var anum={
              a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 11, 
              l: 12, m: 13, n: 14,o: 15, p: 16, q: 17, r: 18, s: 19, t: 20, 
              u: 21, v: 22, w: 23, x: 24, y: 25, z: 26
          }
          if(str.length== 1) return anum[str] || ' ';
          return str.split('').map(letterValue);
      }
      

      letterValue('zoo') 返回:(Array) [26,15,15] ;

      letterValue('z') 返回:(数字)26

      【讨论】:

        【解决方案7】:

        您可以使用此数值计算器 - 它将所有字母值相加 - 用于任何字符串(不区分大小写):

        function getSum(total,num) {return total + num};
        function val(yazı,harf,değer){ rgxp = new RegExp(değer,'gim'); text = yazı.toLowerCase();
        if (text.indexOf(harf) > -1){ sonuc = text.split(harf).join(değer).match(rgxp).map(Number).reduce(getSum) }else{ sonuc=0 };
        return sonuc;}
        
        String.prototype.abjad = function() {
        a = val(this,'a','1'); b = val(this,'b','2'); c = val(this,'c','3'); ç = val(this,'ç','4'); d = val(this,'d','5');
        e = val(this,'e','6'); f = val(this,'f','7'); g = val(this,'g','8'); ğ = val(this,'ğ','9'); h = val(this,'h','10');
        ı = val(this,'ı','11'); i = val(this,'i','12'); j = val(this,'j','13'); k = val(this,'k','14'); l = val(this,'l','15');
        m = val(this,'m','16'); n = val(this,'n','17'); o = val(this,'o','18'); ö = val(this,'ö','19'); p = val(this,'p','20');
        r = val(this,'r','21'); s = val(this,'s','22'); ş = val(this,'ş','23'); t = val(this,'t','24'); u = val(this,'u','25');
        ü = val(this,'ü','26'); v = val(this,'v','27'); y = val(this,'y','28'); z = val(this,'z','29');
        return a+b+c+ç+d+e+f+g+ğ+h+ı+i+j+k+l+m+n+o+ö+p+r+s+ş+t+u+ü+v+y+z
        };
        
        Ask();
        function Ask() {
            text = prompt("Please enter your text");
            if (text != null) {
            alert("Gematrical value is: " + text.abjad())
            document.getElementById("result").innerHTML = text.abjad();
            }
        }
        Gematrical value is: &lt;p id="result"&gt;&lt;/p&gt;

        https://jsfiddle.net/nonidentified/0xydecze/1/

        【讨论】:

          【解决方案8】:

          我用过:

          let a = 'dev';
          let encode = '';
          for (let i = 0; i < a.length; i++) {
            let x = a.slice(i, i+1);
            encode += x.charCodeAt(0);
            
          }
          console.log(encode);

          结果返回:100101118

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-01-24
            • 1970-01-01
            • 2015-03-08
            • 1970-01-01
            • 1970-01-01
            • 2016-07-07
            相关资源
            最近更新 更多