简单数字命理与javascript

时间:2016-06-29 15:14:30

标签: javascript numbers

嘿大家我是新手所以请你好。我已经完成了搜索并找到了与python相关但没有与JS相关的东西。

我已经完成了关于JS的代码学院课程的一半,并且正在尝试应用我迄今为止在创建一个简单的命理学脚本时所学到的知识。到目前为止,我已经学习了函数,循环,变量和数组位置,所以我想这个任务应该是可以实现的。

目的是让用户输入他们的名字,脚本会根据数字规则自动计算出它的值。

例如:

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??

2 个答案:

答案 0 :(得分:3)

请尝试以下代码。以下解释我所做的事情:

  1. 首先,您需要在变量(You should always use var keyword while declaring new variables unless you intentionally want to make it global
  2. 中指定输入的名称
  3. 获得名称后,您需要遍历名称中的每个字符。您可以使用for looplength property of String作为循环限制条件。
  4. 现在,在for循环的每次迭代中,您将获得名称字符串的一个字符。您可以使用此字符获取匹配密钥的值,使用x[ currentCharacter ],例如X [" T&#34]。
  5. 您需要保留一个计数器变量来存储所有字符值的总和,因此我在循环之前声明了nameScore变量并为其指定了初始值0。每次迭代都会获得当前字符的相应值,并将数值添加到nameScore。循环结束时,nameScore包含名称字符串中所有字符值的总和。您可以console.log()alert()使用它,也可以以任何其他方式使用。
  6. 第二部分:获取nameScore的单位数值 对于这一部分,我遵循了以下步骤(可能还有其他方法):

    1. 我们需要检查的第一个条件是nameScore大于10,否则它已经是单个数字。如果我们的数字总和再次超过一位数,这个检查也有帮助,我们需要再次计算单个数字的总和。我已经使用了while循环。

    2. 在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);
      &#13;
      &#13;
      &#13;

答案 1 :(得分:0)

完全赞赏Mohit Bhardwaj的回答,以及对于想要学习JavaScript基本理解的提问者的解释。所以,一旦你擅长这一点并且你知道如何遍历字符串,那么要学习其他javascript实用程序和概念,你仍然可以用不同的方式尝试它。喜欢将它拆开以了解拆分如何工作以及运行映射或减少数组,然后使用forEach来学习它,这里我给出一个快速的例子来解决这个问题,这样你就可以在JavaScript中学习其他代码了

var name = ..... // first get value in name variable however you want
var sum = name.split('').reduce(function(total, eachNumKey){
return (isNaN(total) ? x[total] : total) + x[eachNumKey]
});

这里我将字符串拆分成一个数组,这样我就运行一个forEach而不是维护索引并按索引获取,然后运行reduce来计算sum,(可以先将数组映射到变换等效值数组然后轻松你也可以求和,但那时我将迭代2次,但你也应该在其他一些情况下学习地图)。 在第一次使用reduce时,第一个arg是数组的第一个值,第二个是第二个,但是下一次向前的第一个参数将是你返回的任何内容,第二个参数将是迭代器,所以只需检查条件,并映射到相应的值需要添加。 注意:性能方面,这是解决这一特定问题的更好解决方案,但如果您尝试使用不同方法的所有方法,那么您将了解它们的用途以及何时尝试使用。