Javascript 为电话键盘提供数字值

Javascript 为电话键盘提供数字值,javascript,math,Javascript,Math,我试图使用输入“编程挑战很有趣”时按下的按钮值的乘积来评估。我在每个if/elseif语句中定义了键,并运行for循环来获取每个字母的值 var string = "Programming Challenges are fun".toLowerCase(); var sum = 1; for (i = 0; i < string.length; i++) { var letter = string[i]; if (letter == "a" || "b" || "c") {

我试图使用输入“编程挑战很有趣”时按下的按钮值的乘积来评估。我在每个if/elseif语句中定义了键,并运行for循环来获取每个字母的值

var string = "Programming Challenges are fun".toLowerCase();
var sum = 1;
for (i = 0; i < string.length; i++) {
    var letter = string[i];
    if (letter == "a" || "b" || "c") {
        sum = sum*2;
    }
var string=“编程挑战很有趣”;
var总和=1;
对于(i=0;i
当我运行脚本时,它每次只运行这个if语句,每次运行的次数与字符串的长度一样多

    else if (letter == "d" || "e" || "f"){
        sum = sum*3;
    }
    else if (letter == "g" || "h" || "i"){
        sum = sum*4;
    }
    else if (letter == "j" || "k" || "l"){
        sum = sum*5;
    }
    else if (letter == "m" || "n" || "o"){
        sum = sum*6;
    }
    else if (letter == "p" || "r" || "s"){
        sum = sum*7;
    }
    else if (letter == "t" || "u" || "v"){
        sum = sum*8;
    }
    else if (letter == "w" || "x" || "y"){
        sum = sum*9;
    }
    else if (letter = ""){
        sum = sum;
    }
    document.write(sum);
    document.write("<br>");
};

document.write(sum);
else if(字母==“d”| |“e”| |“f”){
总和=总和*3;
}
else if(字母==“g”| |“h”| |“i”){
总和=总和*4;
}
else if(字母==“j”| |“k”| |“l”){
总和=总和*5;
}
else if(字母==“m”| |“n”| |“o”){
总和=总和*6;
}
else if(字母==“p”| |“r”| |“s”){
总和=总和*7;
}
else if(字母==“t”| |“u”| |“v”){
总和=总和*8;
}
else if(字母==“w”| |“x”| |“y”){
总和=总和*9;
}
否则,如果(字母=”){
总和=总和;
}
文件。填写(金额);
文件。写(“
”); }; 文件。填写(金额);
你知道为什么会这样做吗?谢谢

,因为
“b”
是一个
真值
,所以即使字母不是
“a”
,它也会通过
if
条件

相反,请尝试以下方法:

var keys = {
        a:2, b:2, c:2,
        d:3, e:3, f:3,
        g:4, h:4, i:4,
        j:5, k:5, l:5,
        m:6, n:6, o:6,
        p:7, q:7, r:7, s:7,
        t:8, u:8, v:8,
        w:9, x:9, y:9, z:9
    },
    sum = 1,
    string = "Programming Challenges are fun".toLowerCase(),
    l = string.length, i;
for( i=0; i<l; i++) {
    if( keys[string[i]]) sum *= keys[string[i]];
}
document.write("The total is: "+sum);
var键={
a:2,b:2,c:2,
d:3,e:3,f:3,
g:4,h:4,i:4,
j:5,k:5,l:5,
m:6,n:6,o:6,
p:7,q:7,r:7,s:7,
t:8,u:8,v:8,
w:9,x:9,y:9,z:9
},
总和=1,
string=“编程挑战很有趣”。toLowerCase(),
l=字符串长度,i;
对于(i=0;i,因为
“b”
真值
,所以即使字母不是
“a”
,它也会通过
if
条件

相反,请尝试以下方法:

var keys = {
        a:2, b:2, c:2,
        d:3, e:3, f:3,
        g:4, h:4, i:4,
        j:5, k:5, l:5,
        m:6, n:6, o:6,
        p:7, q:7, r:7, s:7,
        t:8, u:8, v:8,
        w:9, x:9, y:9, z:9
    },
    sum = 1,
    string = "Programming Challenges are fun".toLowerCase(),
    l = string.length, i;
for( i=0; i<l; i++) {
    if( keys[string[i]]) sum *= keys[string[i]];
}
document.write("The total is: "+sum);
var键={
a:2,b:2,c:2,
d:3,e:3,f:3,
g:4,h:4,i:4,
j:5,k:5,l:5,
m:6,n:6,o:6,
p:7,q:7,r:7,s:7,
t:8,u:8,v:8,
w:9,x:9,y:9,z:9
},
总和=1,
string=“编程挑战很有趣”。toLowerCase(),
l=字符串长度,i;
对于(i=0;i
朋友应该是

if ((letter == "d") || (letter == "e") || (letter == "f"))
正如您所希望的那样,
不是字母,而是条件

编辑:

@Kolink的答案有更好的代码,用它吧。把这当作老师的答案,而不是程序员的答案

朋友应该是

if ((letter == "d") || (letter == "e") || (letter == "f"))
正如您所希望的那样,
不是字母,而是条件

编辑:


@Kolink的答案有更好的代码,请使用它。在这里,这是一个老师的答案,而不是程序员的答案

你的问题是你的条件总是满的

例如:

if(字母==“a”| |“b”| |“c”)

把它分开:

  • 字母等于“a”?->可能
  • 是否定义了“b”?->是
  • 是否定义了“c”?->是
所以这总是正确的。正确的方法是:

if(字母==“a”|字母==“b”|字母==“c”)

更方便的方法是检查ASCII值(检查)

字母“a”是97,字母“z”是122,你想把它们分成三个字母的一组。顺便说一下,你忘记了字母q和z,所以还有一组;)

以下是另一种方法:

var string = "Programming Challenges are fun".toLowerCase();
var sum = 1;

// lower bound
var a = 97;
// upper bound
var z = 122;

for (i = 0; i < string.length; i++) {
    // get the ascii value
    var letter = string[i].charCodeAt(0);

    // boundary check
    if(letter >= a && letter <= z) {
        // we remove the lower bound to get a relative position from 0-25 (alphabet has 26 characters)
        // we divide by three and cut off all decimals (parseInt) so a,b,c become 0, d,e,f become 1 etc. 
        // then we add an offset of two so that a,b,c has factor 0+2=2, d e f has factor 1+2=3 and so on...
        var factor = parseInt((letter - a) / 3) + 2; 

        sum *= factor;
    }
}

document.write(sum);
var string=“编程挑战很有趣”;
var总和=1;
//下限
var a=97;
//上限
var z=122;
对于(i=0;i如果(字母>=a&&letter你的问题是你的条件总是满的

例如:

if(字母==“a”| |“b”| |“c”)

把它分开:

  • 字母等于“a”?->可能
  • 是否定义了“b”?->是
  • 是否定义了“c”?->是
所以这总是正确的。正确的方法是:

if(字母==“a”|字母==“b”|字母==“c”)

更方便的方法是检查ASCII值(检查)

字母“a”是97,字母“z”是122,你想把它们分成三个字母的一组。顺便说一下,你忘记了字母q和z,所以还有一组;)

以下是另一种方法:

var string = "Programming Challenges are fun".toLowerCase();
var sum = 1;

// lower bound
var a = 97;
// upper bound
var z = 122;

for (i = 0; i < string.length; i++) {
    // get the ascii value
    var letter = string[i].charCodeAt(0);

    // boundary check
    if(letter >= a && letter <= z) {
        // we remove the lower bound to get a relative position from 0-25 (alphabet has 26 characters)
        // we divide by three and cut off all decimals (parseInt) so a,b,c become 0, d,e,f become 1 etc. 
        // then we add an offset of two so that a,b,c has factor 0+2=2, d e f has factor 1+2=3 and so on...
        var factor = parseInt((letter - a) / 3) + 2; 

        sum *= factor;
    }
}

document.write(sum);
var string=“编程挑战很有趣”;
var总和=1;
//下限
var a=97;
//上限
var z=122;
对于(i=0;i=a&&字母