【发布时间】:2017-05-17 21:52:36
【问题描述】:
我正在尝试解决 JavaScript 中的一个问题,即为字母分配数字,以便当用户键入字符串时,它会返回分配给字母的数字的总和。我该如何解决?我尝试了很多不同的方法,但我认为我什至没有接近。
【问题讨论】:
-
请告诉我们您的尝试
标签: javascript arrays string numbers
我正在尝试解决 JavaScript 中的一个问题,即为字母分配数字,以便当用户键入字符串时,它会返回分配给字母的数字的总和。我该如何解决?我尝试了很多不同的方法,但我认为我什至没有接近。
【问题讨论】:
标签: javascript arrays string numbers
[...] 我可以在其中为字母表中的字母分配数字 [...]
我建议在字符和它们选择的值之间声明一个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。
[...] 它返回字母数值的总和 [...]
使用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);
});
<input id="text" type="text">
【讨论】:
要获取字符的 ASCII 值,请使用 String.charCodeAt(index)。
(当你说“数字”时,它有点模棱两可。你想要与字符对应的 ASCII 值吗?为了清楚起见,也许编辑你的问题。)
【讨论】:
如果我能很好地理解您的问题,那么您正在尝试这样做:
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”...
【讨论】:
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)并将它们添加到一个函数中,并将结果返回到函数中或文本输入中。确保将字母大写。
【讨论】: