2016-11-29 78 views
0

所以我有兩個函數。我會都張貼在這裏: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函數將非常好。沒問題。

隨着第二個功能,我希望能夠採取一個字符串和每個字符做同樣的事情。例如,wordToNato("ABC123")將是"Alpha Bravo Charlie One Two Three"。這是出現問題的地方。每次我嘗試在控制檯通過調用wordToNato運行此它帶來的錯誤信息

ch.match不是一個函數

所以我不知道是怎麼回事錯誤...請幫助

+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正在傳遞一個整數 - 的值。該指數在使用的字符,而不是指數,並添加來自ltrToNato返回累積器變量小號值(使用+=運營商簡化串聯):

    s += ltrToNato(str[i]);

    你可以也可以使用charAt()而不是象數組一樣索引到字符串中。

  2. 循環應通過長度爲0不迭代,由於開始要麼使中間表達式去一個小於長度i <= str.length-1或使用小於比較:i < str.length

    而不是使用聲明,你可以在海峽調用Array.prototype.reduce

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

    這樣,你就不必擔心對循環簿記。閱讀更多關於函數式編程的內容here

  3. 回報在wordToNato1末增加無功小號後的字符串:

    return s;

  4. x.match()支票將返回一個數組或爲空,所以你的條件表達式else if (x = x.match(/[0-9]/g))的值match()分配給x,用新值覆蓋它,其可以用於最後的其他塊(即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'));