2016-11-29 8 views
0

私は2つの機能を持っています。Javascript "ch.matchは関数ではありません"

//A 
var ltrToNato = function(ch) { 
    var x = ch 
    var nato = 
    ('{"A": "Alpha", "B": "Bravo", "C": "Charlie", "D": "Delta", "E": "Echo", "F": "Foxtrot", "G": "Golf", "H": "Hotel", "I": "India", "J": "Juliet", "K": "Kilo",\ 
    "L": "Lima", "M": "Mike", "N": "November", "O": "Oscar", "P": "Papa", "Q": "Quebec", "R": "Romeo", "S": "Sierra", "T": "Tango", "U": "Uniform", "V": "Victor",\ 
    "W": "Whiskey", "X": "X-Ray", "Y": "Yankee", "Z": "Zulu", "0" : "Zero", "1" : "One", "2" : "Two", "3" : "Three", "4" : "Four", "5" : "Five", "6" : "Six",\ 
    "7" : "Seven", "8" : "Eight", "9" : "Niner"}') 
    var natoLower = nato.toLowerCase() 
    var natoAlpha = JSON.parse(nato) 
    var natoAlphaLower = JSON.parse(natoLower) 
    if (ch >= "A" && ch <= "Z") 
    return natoAlpha[ch] 
    else if (ch >= "a" && ch <= "z") 
    return (natoAlphaLower[ch]) 
    else if (x = x.match(/[0-9]/g)) 
    return natoAlpha[ch] 
    else 
    return x 
} 

//B 
var wordToNato1 = function(str) { 
    var s = "" 
    for (var i = 0; i <= str.length; i++) { 
    s + ltrToNato(i) 
    } 
} 

最初の機能では、任意の文字または数字を受け取り、そのナイトフォームを返す必要があります。従って"A"Alphaとなり、"9"Ninerとなります。 ltrToNato関数は完全にうまくいくでしょう。問題はありません。

2番目の機能では、文字列を取り、すべての文字で同じことをしたいと思っています。したがって、たとえばwordToNato("ABC123")"Alpha Bravo Charlie One Two Three"となります。これは何かが間違っているところです。私はそれがエラーメッセージ

ch.matchが助けてください...だから、私は間違って何が起こっているか見当がつかない機能

ないもたらすwordToNatoを呼び出すことで、コンソールでこれを実行しようと毎回位置ではなく、ループインデックスの値の文字で

+0

あなたは、そのエラーメッセージがから来ている 'ch.match'、呼び出すことはありませんか?また、 'x = x.match(/ [0-9]/g)'は少し奇妙です。あなたは本当に譲渡したいのですか、それとも比較をしたいのですか? – vlaz

答えて

0

パス:

s + ltrToNato(str.charAt(i)) 

はまた、あなたのループが電子過ぎて起こっています文字列のnd。あなたは<代わりの<=

for (var i = 0; i < str.length; i++) { 

あなたのプログラムは、他の多くのエラーを持っているように見えますが、これは、この特定の質問に答えるを使用する必要があります。

0

カップルの変更: - の値

  1. は、あなたの質問に答えるために、ltrToNatoへの呼び出しは、整数を渡されています。代わりに、インデックスの、インデックスの文字を利用し、cumulator変数にltrToNatoから返された値を追加します(連結を簡素化するために+=演算子を使用):

    s += ltrToNato(str[i]);

    あなたができましたまた、配列のような文字列にインデックスを付ける代わりにcharAt()を使用してください。 forループ

  2. は0で開始以来、長さを反復処理のどちらか中間の表現は長さi <= str.length-1または比較未満使うよりも小さいものに行かせるべきではない:i < str.lengthを。

    代わりためのステートメントを使用して、あなたはSTRArray.prototype.reduceを呼び出すことができます:

    return Array.prototype.reduce.call(str,function(returnVal,character) { return returnVal + ltrToNato(character); });

    あなたがループ簿記のために心配する必要はありませんその方法を。関数プログラミングhereの詳細を読む。

  3. リターンwordToNato1の終わりに VARに追加した後の文字列:x.match()のチェックが配列またはnullを返します

    return s;

  4. ので、あなたの条件式else if (x = x.match(/[0-9]/g))ますの値をmatch()にxに代入し、新しい値で上書きします。最終値で使用される可能性があります。elseブロック(つまりreturn x)。

は、以下の例に適用され、これらの変更を参照してください:

var ltrToNato = function(ch) { 
 
    var x = ch 
 
    var nato = 
 
    ('{"A": "Alpha", "B": "Bravo", "C": "Charlie", "D": "Delta", "E": "Echo", "F": "Foxtrot", "G": "Golf", "H": "Hotel", "I": "India", "J": "Juliet", "K": "Kilo",\ 
 
    "L": "Lima", "M": "Mike", "N": "November", "O": "Oscar", "P": "Papa", "Q": "Quebec", "R": "Romeo", "S": "Sierra", "T": "Tango", "U": "Uniform", "V": "Victor",\ 
 
    "W": "Whiskey", "X": "X-Ray", "Y": "Yankee", "Z": "Zulu", "0" : "Zero", "1" : "One", "2" : "Two", "3" : "Three", "4" : "Four", "5" : "Five", "6" : "Six",\ 
 
    "7" : "Seven", "8" : "Eight", "9" : "Niner"}') 
 
    var natoLower = nato.toLowerCase() 
 
    var natoAlpha = JSON.parse(nato) 
 
    var natoAlphaLower = JSON.parse(natoLower) 
 
    if (ch >= "A" && ch <= "Z") 
 
    return natoAlpha[ch] 
 
    else if (ch >= "a" && ch <= "z") 
 
    return (natoAlphaLower[ch]) 
 
    else if (x.match(/[0-9]/g)) 
 
    return natoAlpha[ch] 
 
    else 
 
    return x 
 
} 
 

 
//B 
 
var wordToNato1 = function(str) { 
 
    var s = "" 
 
    for (var i = 0; i <= str.length-1; i++) { 
 
    s += ltrToNato(str[i]) 
 
    } 
 
    return s; 
 
} 
 
console.log('nato: '+wordToNato1("ABC123"));

1

を私はここで何かが足りないのですか?

マップされた単語で文字を文字列に変換する必要があります。

したがって、入力を文字に分割するだけです。次にあなたの言葉にそれらをマッピングし、単一のスペースですべて一緒に参加してください。

var MAP ={A:"Alpha",B:"Bravo",C:"Charlie",D:"Delta",E:"Echo",F:"Foxtrot",G:"Golf",H:"Hotel",I:"India",J:"Juliet",K:"Kilo",L:"Lima",M:"Mike",N:"November",O:"Oscar",P:"Papa",Q:"Quebec",R:"Romeo",S:"Sierra",T:"Tango",U:"Uniform",V:"Victor",W:"Whiskey",X:"X-Ray",Y:"Yankee",Z:"Zulu",0:"Zero",1:"One",2:"Two",3:"Three",4:"Four",5:"Five",6:"Six",7:"Seven",8:"Eight",9:"Niner"}; 
 

 

 
function strToNato(str){ 
 
    return str.toUpperCase().split('').map(l => MAP[l] || l).join(' '); 
 
} 
 

 
console.log(strToNato('ABC123'));

関連する問題