web-dev-qa-db-ja.com

JavaScriptで文字を数字に変換する

入力した各英字を数字に変換する方法を教えてください。

例えばa = 1、b = 2、c = 3からz = 26まで

Cでは、文字入力を取得して整数として表示することで、同様のことを行うことができました。しかし、JavaScriptでこれをどのように行うかはわかりません。

8
Alex Kom
var alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];
var letter = "h";
var letterPosition = alphabet.indexOf(letter)+1;

編集:

文字列内の文字を計算する可能性、aa = 2、ab = 3など。

function str_split(string, split_length) {
  //  discuss at: http://phpjs.org/functions/str_split/
  // original by: Martijn Wieringa
  // improved by: Brett Zamir (http://brett-zamir.me)
  // bugfixed by: Onno Marsman
  //  revised by: Theriault
  //  revised by: Rafał Kukawski (http://blog.kukawski.pl/)
  //    input by: Bjorn Roesbeke (http://www.bjornroesbeke.be/)
  //   example 1: str_split('Hello Friend', 3);
  //   returns 1: ['Hel', 'lo ', 'Fri', 'end']

  if (split_length == null) {
    split_length = 1;
  }
  if (string == null || split_length < 1) {
    return false;
  }
  string += '';
  var chunks = [],
    pos = 0,
    len = string.length;
  while (pos < len) {
    chunks.Push(string.slice(pos, pos += split_length));
  }

  return chunks;
}


function count(string){
    var alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];

    var splitted_string = str_split(string);

    var count = 0;
    for (i = 0; i < splitted_string.length; i++) { 
        var letterPosition = alphabet.indexOf(splitted_string[i])+1;
        count = count + letterPosition;
    }
    return count;
}

console.log(count("az")); // returns 27 in the console
7
Erik van de Ven

正しければ、提供される回答は複雑すぎます。

parseInt('a', 36) - 9; // 1
parseInt('z', 36) - 9; // 26
parseInt('A', 36) - 9; // 1
parseInt('Z', 36) - 9; // 26
'a'.charCodeAt() - 96; // 1
'z'.charCodeAt() - 96; // 26
'A'.charCodeAt() - 64; // 1
'Z'.charCodeAt() - 64; // 26
function charToNumber (s, i) {
    return parseInt(s.charAt(i), 36) - 9;
}

function sumChars (s) {
    var i = s.length, r = 0;
    while (--i >= 0) r += charToNumber(s, i);
    return r;
}
sumChars('az'); // 27
42
leaf

JavaScriptでは、文字は1バイトのデータ型ではないため、Cの動作を模倣したい場合は、自分でマッピングを作成する必要があります。

たとえば、単純なオブジェクトをマップとして使用します。

var characters: {
    'a': 1,
    'b': 2,
    ...
}

このようにして、var number = charachters['a'];は番号を1に設定します。他のものは、おそらくより実行可能であるショートメソッドを提供しました、これは主に簡単な理解を目的としています。

3
meskobalazs

あなたはこのようにそれを行うことができます

function convertToNumbers(str){
   var arr = "abcdefghijklmnopqrstuvwxyz".split("");
   return str.replace(/[a-z]/ig, function(m){ return arr.indexOf(m.toLowerCase()) + 1 });
}

アルファベットの配列を作成してから、String.replace関数でコールバックを使用し、+1から始まるインデックスとして文字0のそれぞれのインデックスを返します。

1
Amit Joki

これはうまくいくでしょう

"abcdefghijklmnopqrstuvwxyz".split("").forEach(function (a,b,c){ console.log(a.toLowerCase().charCodeAt(0)-96)});


"iloveyou".split("").forEach(function (a,b,c){ console.log(a.toLowerCase().charCodeAt(0)-96)});

9
12
15
22
5
25
15
21
1
Royi Namir

アスキー値と大文字のマイナス64を取得できます。

var letterPlacement = "A".charCodeAt(0) - 64;

または小文字の場合はマイナス96。

var letterPlacement = "a".charCodeAt(0) - 96;

または、ケースについて気にしない、すっきりとした1行の関数として:

function alphabetifier(letter) {
    return letter.charCodeAt(0) - (letter === letter.toLowerCase() ? 96 : 64);
}      
1

値をマップするオブジェクトを作成できます-

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')戻り値:(配列)[26,15,15];

letterValue( 'z')戻り値:(数値)26

1
kennebec