求和一个单词中与字母相等的数字,直到它达到一个数字为止?

时间:2019-06-01 09:49:02

标签: javascript

我正在尝试解决一个问题,即用户输入文本,然后我必须将文本转换为给定的数值,除非答案是一位数字,否则将它们加在一起。

到目前为止,我已经能够获取输入,将它们转换为给定的数字并将它们存储在数组中。但是我不知道下一步该怎么做。我将如何将这些值加在一起,直到剩下一个数字。

var values = {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};
var someText = prompt('');

someText = someText.trim();
someText = someText.match(/\S/g);

var result = "";
for (i = 0; i < someText.length; i++) {
  result += values[someText[i]];
}

alert(result);

例如,如果输入为“动作”,则数值为  => 1.3.20.9.15.14。 -将这些值加在一起。    1 + 3 + 20 + 9 + 15 + 14答案将是62。 -由于答案是2位数字,因此我们再次添加数字    例如62 = 6 + 2 = 8。

注意: 如果答案大于1位数字,例如199 => 1 + 9 + 9 => 19 => 1 + 9 => 10 = 1 + 0 = 1。 答案必须始终是一个数字。

3 个答案:

答案 0 :(得分:0)

您可以使用reduce()来获取字符串的所有数字之和。如果结果为一位数字,则返回该数字,否则以递归方式调用该函数。

您也不需要使用字母值对对象进行硬编码。只需使用reduce()chatCodeAt来生成一串数字即可。

var someText = prompt('').trim().toLowerCase().match(/\S/g)

let result = someText.reduce((ac,a) => ac + (a.charCodeAt(0) - 96),'');
function findSum(num){
  if(num.length === 1) return num;
  else return findSum(String(num.split('').reduce((ac,a) => ac + +a,0)))
}

console.log(findSum(result))

答案 1 :(得分:0)

您可以按照以下方式进行操作:

var values = {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};
var someText = prompt('');

someText = someText.trim();
someText = someText.match(/\S/g);

var result = "";
for (i = 0; i < someText.length; i++) {
  result += values[someText[i]];
}

// While the result is >9, which means that there's more than 1 digit
while(result > 9) {
   // Cast result as String, so we can use charAt()
   var stringedResult = String(result);

   // Reset our result var, because we're going to recalculate it
   result = 0;

   // For each int in our result, we add them up (ex. 621 = 6+2+1)
   for(var i=0; i<stringedResult.length; i++) {
       // Cast the stringed result back to a number, and add it to our result variable
       result += Number(stringedResult.charAt(i));
   }
}

alert(result);

答案 2 :(得分:0)

您应该使用函数对值求和并返回一个数字的值,否则请调用自身:

var values = {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};
var someText = prompt('');

someText = someText.match(/\S/g);

var result = 0;

function getSum(string) {
    for (i = 0; i < string.length; i++) {
        if (isNaN(string[i])) {
            result += values[string[i]];
        } else {
            result += parseInt(string[i]);
        }
    }
    if (result.toString().length > 1) {
        var aux = result.toString();
        result = 0;
        return getSum(aux);
    } else {
        return result;
    }
}

alert(getSum(someText));