简单的数字命理学

simple numerology with javascript

本文关键字:数字 简单      更新时间:2023-09-26

大家好,我是一个新手,所以请友好。我做了一个搜索,发现了一些与python相关的东西,但没有一个与JS有关。

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

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

例如:

: 1、J: 1, S: 1, B: 2,凯西:2,T: 2, C: 3,李: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,问:8,Z: 8我:9,接待员:9

所以TOM这个名字应该等于12,因为(2+6+4)。

我还没有得到非常远关于创建一个工作脚本,不知道如何进行。到目前为止,我能够隔离名称中的第一个字符,但我不知道如何将其转换为数字,或者如何对其余字符进行相同的操作:

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

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

  1. 首先,你需要在变量中分配输入的名称(在声明新变量时,你应该始终使用var关键字,除非你有意将其设置为全局)
  2. 一旦有了名称,就需要循环遍历名称中的每个字符。您可以使用for环,Stringlength性质作为环的限制条件。
  3. 现在,在for循环的每次迭代中,您将获得名称字符串的一个字符。您可以使用此字符来获取匹配密钥的值,使用x[ currentCharacter ],例如x["T"]。
  4. 你需要保持一个计数器变量来存储所有字符值的总和,所以我在循环之前声明了nameScore变量,并给它分配了一个初始值0。每次迭代获取当前字符的对应值,并将数值添加到nameScore。到循环结束时,nameScore包含名称字符串中所有字符值的总和。您可以console.log()alert(),或以任何您想要的方式使用。

第二部分:获取nameScore的个位数值对于这一部分,我遵循了以下步骤(可能还有其他方法):

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

  • 在while循环中,我们需要再次保持一个计数器(初始化为0),迭代每个数字并将其添加到计数器中。为了循环遍历它,我们首先将其转换为string(使用''+singleDigitScore),以便我们可以访问length属性并使用charAt()获取单个数字。由于charAt()返回数字的字符串表示形式,因此在将其添加到计数器之前,使用parseInt()将其转换为数字。如果结果数小于10,则退出循环,否则再次运行相同的循环,并将number更新为刚刚计算的新数。

    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);

  • 非常欣赏Mohit Bhardwaj的回答,以及对想要了解JavaScript基本知识的提问者的解释。一旦你掌握了这个,知道了如何遍历字符串,然后学习其他javascript实用工具和概念,你仍然可以用不同的方式尝试。比如用split来学习split是如何工作的,在数组中运行map或reduce,然后用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次,但在其他情况下你也应该学习map)。在reduce中,第一次它的第一个参数是数组的第一个值,第二个是第二个值,但下一次它的第一个参数将是你返回的任何东西,第二个参数将是迭代器,所以只是检查了一个条件,并映射到相应的值需要添加。注意:就性能而言,这并不是解决这个特定问题的更好的解决方案,但是如果您尝试了不同的方法,那么您将了解它们的用途以及何时尝试什么。