【问题标题】:JS - getting the sum of numbers assigned to the lettersJS - 获取分配给字母的数字总和
【发布时间】:2017-05-17 21:52:36
【问题描述】:

我正在尝试解决 JavaScript 中的一个问题,即为字母分配数字,以便当用户键入字符串时,它会返回分配给字母的数字的总和。我该如何解决?我尝试了很多不同的方法,但我认为我什至没有接近。

【问题讨论】:

标签: javascript arrays string numbers


【解决方案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

[...] 它返回字母数值的总和 [...]

使用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">

【讨论】:

    【解决方案2】:

    要获取字符的 ASCII 值,请使用 String.charCodeAt(index)。

    (当你说“数字”时,它有点模棱两可。你想要与字符对应的 ASCII 值吗?为了清楚起见,也许编辑你的问题。)

    【讨论】:

      【解决方案3】:

      如果我能很好地理解您的问题,那么您正在尝试这样做:

      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”...

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2019-06-27
          • 1970-01-01
          • 2020-10-03
          • 1970-01-01
          • 2017-12-16
          • 1970-01-01
          • 2018-04-18
          • 2016-02-17
          • 1970-01-01
          相关资源
          最近更新 更多