2016-06-29 4 views
2

ねえ皆私は初心者ですので素敵にしてください。私は検索を行い、Pythonに関連するものを見つけましたが、JSには何も見つかりませんでした。JavaScriptで単純な数秘術

私は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

したがって、TOMの名前は(2 + 6 + 4)のため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?? 
+0

代わりに 'x [name [0]]'を使ってみてください。 –

答えて

3

コードを、次の試してみてください。ここに私がやっていることの説明があります:

  1. まずあなたが名前を持っていたら、名前の各文字をループする必要が
  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を使用できます。
  3. 今度は、forループの各繰り返しで、名前文字列の1文字を取得します。この文字を使用して、一致するキーの値を取得することができます。x[ currentCharacter ]などを使用します。 x ["T"]。
  4. すべての文字値の合計を格納するためにカウンタ変数を保持する必要があるため、ループの前にnameScore変数を宣言し、初期値の0を割り当てました。各反復は、現在の文字に対応する値を取得し、数値をnameScoreに追加します。ループが終了するまでに、nameScoreには、名前文字列のすべての文字値の合計が含まれます。 console.log()またはalert()とするか、他の方法で使用することもできます。

第二部:この部分のnameScore の一桁の値を取得する、私は、次のステップ(他の可能なアプローチが存在してもよい)、続い:

  • 最初に確認する必要があるのは、nameScoreが10より大きい場合です。それ以外の場合は、すでに1桁です。このチェックは、桁の合計が再び1桁以上で、1桁の合計を再度計算する必要がある場合に役立ちます。私はこのために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++) 
     
        { 
     
        \t var curChar = name.charAt(i); 
     
        \t var curValue = x[ curChar ]; 
     
        \t 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);

  • +0

    私はこれがうまくいくと確信していますが、正解をダンプするのではなく、コードが何をしているのか簡単に説明できますか? – JJJ

    +0

    @Juhanaええ、私はいくつかの説明を追加するために編集しています。ありがとう:) –

    +0

    クイックレスポンスには本当にありがとう!はい、説明は非常に高く評価されます – user6528657

    0

    完全にはJavaScriptの基本的な理解を学びたい、質問者のためにもMohit Bhardwajによって答えを感謝し、その背後にある、について説明。一度あなたはそれがうまくいけば、あなたは文字列を反復する鍬を知っていて、他の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を実行します(配列をマッピングして、合計も2回繰り返されますが、他の場合には地図を学ばなければなりません)。 最初にreduceで最初のargはarrayの最初の値で、2番目は2番目ですが、次回以降の最初の引数は返されたものになり、2番目の引数はイテレータになります。対応する値にマップして追加する必要があります。 注:パフォーマンス上の理由は、この特定の問題のためのより良い解決方法ですが、異なる方法ですべてを試してみると、その使用方法や時期を知ることができます。

    +0

    ありがとう@Koushik Chatterjee :) –

    関連する問題