在JS中,我试图构建一些可以在字母表中为字母分配数字的东西,这样当用户输入单词时,它会返回字母的总和。数值。我该怎么做呢?我尝试了很多不同的方法,但我认为我甚至不能接近。
答案 0 :(得分:1)
[...]我可以在字母[...]
中为字母分配数字
我建议在字符和所选值之间声明mapping:
const numbers = {
'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
};
[...]当用户输入单词[...]
时
您需要<input>
element并收听"input" events。
[...]它返回字母的总和&#39;数值[...]
使用Array.map
按looking up numbers
给出的每个字母值,将字母转换为数字,并计算sum of the resulting array:
const numbers = {
'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
};
document.getElementById("text").addEventListener("input", function() {
let str = this.value.toLowerCase();
let sum = [...str].map(c => numbers[c] || 0).reduce((a, b) => a + b, 0);
console.log(sum);
});
&#13;
<input id="text" type="text">
&#13;
答案 1 :(得分:0)
要获取字符的ASCII值,请使用String.charCodeAt(index)。
(当你说“数字”时,它有点含糊不清。你想要与字符对应的ASCII值吗?可能为了清晰起见而编辑你的问题。)
答案 2 :(得分:0)
如果我理解你的问题,那你就是这么做的:
var obj = {
'a': 7,
'b': 10,
'c': 3,
};
var input = document.getElementsByTagName('input')[0];
input.addEventListener('input', handler, false);
function handler() {
var val = input.value,
sum = 0,
count = document.getElementById('count');
for (var i = 0; i < val.length; i++) {
if (obj[val[i]]) {
sum += obj[val[i]];
}
}
count.innerHTML = sum;
}
<input type="text" placeholder="Enter some text...">
<div id="count">0</div>
为简单起见,此实现仅适用于“a”,“b”和“c”......
答案 3 :(得分:0)
var letters = [];
var input = document.getElementsByTagName('input')[0];
input.addEventListener('input', addWordLetters, false);
for(var code=65;code<91;code++)
{
var letter = String.fromCharCode(code);
letters.push(letter);
}
function addWordLetters(){
var word = input.value.toUpperCase();
var total = 0;
totalText = document.getElementById('totalText');
for (var i = 0; i < word.length; i++) {
var letter = word.charAt(i);
var letterVal = letters.indexOf(letter) + 1;
total += letterVal;
}
console.log(total);
totalText.innerHTML = total;
}
ADD TEXT<br>
<input type="text" placeholder="TYPE TEXT HERE...">
<div id="totalText">0</div>
此代码应该可以解决问题,并且已经过测试。无需手动输入所有这些字母。只需将它们放在一个数组中,然后循环遍历它们的字符代码,直到你到达z。然后使用indexOf查找每个字母的数组索引(当然加1)并将它们一起添加到函数中,并将结果返回到函数或文本输入中。确保字母大写。