JS - 获得分配字母的数字总和

时间:2017-05-17 21:52:37

标签: javascript arrays string numbers

在JS中,我试图构建一些可以在字母表中为字母分配数字的东西,这样当用户输入单词时,它会返回字母的总和。数值。我该怎么做呢?我尝试了很多不同的方法,但我认为我甚至不能接近。

4 个答案:

答案 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.maplooking up numbers给出的每个字母值,将字母转换为数字,并计算sum of the resulting array

&#13;
&#13;
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;
&#13;
&#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)并将它们一起添加到函数中,并将结果返回到函数或文本输入中。确保字母大写。