This question already has answers here:
Dynamically access object property using variable

(16个答案)


4年前关闭。




大家好,我是新手,所以请保持友好。我进行了搜索,发现与python有关的内容,但与JS无关。

我已经完成了JS代码学院类(class)的一半,并且正在尝试将到目前为止所学的知识应用于创建简单的命理学脚本。到目前为止,我已经学习了函数,循环,变量和数组位置,因此我认为此任务应该可以实现。

目的是让用户输入其名称,然后脚本根据命理规则自动计算其值。

例如:

A:1,J:1,S:1,B:2,K:2,T:2,C:3,L:3,U:3,D:4,M:4,V:4,E: 5,N:5,W:5,F:6,O:6,X:6,G:7,P:7,Y:7,H:8,Q:8,Z:8,I:9, R:9

因此,由于(2 + 6 + 4),名称TOM等于12。

关于创建一个有效的脚本,我还没有走很远的距离,也不知道该如何继续。到目前为止,我能够隔离名称中的第一个字符,但是我不知道如何将其转换为数字,或者如何对其余字符执行相同操作:
var x = {A:1, J:1, S:1, B:2, K:2, T:2, C:3, L:3, U:3, D:4,
M:4, V:4, E:5, N:5, W:5, F:6, O:6, X:6, G:7, P:7, Y:7, H:8,
Q:8, Z:8, I:9, R:9};

name = prompt ("Type your name in CAPS"); //for example: TOM
name = name[0]; // first letter is T
console.log(name[0]); // prints T
console.log(x.T) // prints 2


console.log(x.(name[0])); //not working. I thought it would also print 2??

最佳答案

请尝试以下代码。这里是我所做的解释:

  • 首先,您需要在变量(You should always use var keyword while declaring new variables unless you intentionally want to make it global)中分配输入的名称
  • 一旦有了名称,就需要遍历名称中的每个字符。您可以为此使用 for loop,并使用 length property of String 作为循环限制条件。
  • 现在,在for循环的每次迭代中,您将获得名称字符串的一个字符。您可以使用此字符来获取匹配键的值,例如使用x[ currentCharacter ]。 x [“T”]。
  • 您需要保留一个计数器变量来存储所有字符值的总和,因此我在循环之前声明了nameScore变量,并为其分配了初始值0。每次迭代都会获取当前字符的对应值,并将数值添加到nameScore中。循环结束时,nameScore包含名称字符串中所有字符值的总和。您可以对其进行console.log()alert()编码,或以其他任何方式使用。

  • 第二部分:获取名称的单个数字值
    对于这一部分,我遵循以下步骤(可能还有其他方法):
  • 我们需要检查的第一个条件是nameScore大于10,否则它已经是一位数字。如果我们的位数总和再次大于一位数,并且我们需要再次计算一位数总和,则此检查也有帮助。我为此使用了while循环。
  • 在while循环中,我们需要再次保留一个计数器(初始化为0),遍历每个数字并将其添加到计数器中。为了遍历它,我们首先将其转换为string(使用''+singleDigitScore),以便我们可以访问length属性并使用charAt()获取各个数字。由于charAt()返回数字的字符串表示形式,因此在将其添加到计数器之前,我们使用parseInt()将其转换为数字。如果得出的数字小于10,则退出循环,否则将再次运行同一循环,并将数字更新为刚计算出的新数字。

    var x = {A:1, J:1, S:1, B:2, K:2, T:2, C:3, L:3, U:3, D:4,
        M:4, V:4, E:5, N:5, W:5, F:6, O:6, X:6, G:7, P:7, Y:7, H:8,
        Q:8, Z:8, I:9, R:9};
    
        var name = prompt ("Type your name in CAPS"); //for example: TOM
        var nameScore = 0;
    
        for( var i = 0; i < name.length; i++ )
        {
        	var curChar = name.charAt( i );
        	var curValue = x[ curChar ];
        	nameScore = nameScore + curValue;
        }//for()
    
    
        console.log( "Total score for this name is: " + nameScore );
    
    var singleDigitScore = nameScore;
    while( singleDigitScore >= 10 )
      {
        var total = 0;
        var str = '' + singleDigitScore;
        for( var i = 0; i < str.length; i++ )
          {
            total = total + parseInt( str.charAt(i) );
          }//for()
        singleDigitScore = total;
      }//while
    
    console.log("Single Digit score is: "+singleDigitScore);

  • 09-06 18:18