Как преобразовать буквы в числа с помощью Javascript?
Как я мог конвертировать письмо в соответствующее число в JavaScript?
Например:
a = 0
b = 1
c = 2
d = 3
Я нашел этот вопрос в преобразовании чисел в буквы за пределами 26-символьного алфавита, но он просит обратное.
Есть ли способ сделать это без огромного массива?
Ответы
Ответ 1
Вы можете получить кодовую точку * из любого индекса в строке, используя String.prototype.charCodeAt
. Если ваша строка является единственным символом, вам нужен индекс 0
, а код для a
- 97 (легко получается из JavaScript как 'a'.charCodeAt(0)
), поэтому вы можете просто сделать:
s.charCodeAt(0) - 97
И если вы хотите пойти наоборот, String.fromCharCode
принимает кодовые слова Unicode * и возвращает строку.
String.fromCharCode(97 + n)
* не совсем
Ответ 2
Извините, я подумал, что нужно идти в другую сторону.
Попробуйте это вместо:
var str = "A";
var n = str.charCodeAt(0) - 65;
Ответ 3
Вы можете назначить 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
*/
Ответ 4
Если вы хотите иметь возможность обрабатывать Excel в виде букв прошлых 26, например AA
, то вы можете использовать следующую функцию, адаптированную из этого вопроса:
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
Вы можете создать объект, который отображает значения:
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') возвращает: (Number) 26
Ответ 6
Это короткий и поддерживает прописные и строчные буквы.
const alphaVal = (s) => s.toLowerCase().charCodeAt(0) - 97 + 1
Ответ 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: <p id="result"></p>