2017-07-10 11 views
-3

私は以下のJavascriptコードでスタックしていますが、何が問題なのかわかりません。 JavaScriptでタイプエラー、未定義のプロパティ 'match'を読み取ることができません

function keepletteronly(str) { 
    str=str.toLowerCase();//Make the string to lower case 
    arr=str.split(""); //This way I make an array out of the string 
    arr1=[]; //make an new array 
for (i=1; i<=arr.length;i++){ 
    if (arr[i].match(/[a-z]/)!=null) { //This is where the problem is 
     arr1.push(arr[i]); //retain only the letters and append to the arr1 
    } 
} 
newstring=arr1.join; 
return newstring; 


} 



keepletteronly("1eye"); 
+0

'i'は0でなければならず、条件は' <'not' <= 'でなければなりません。 – Li357

+0

あなたは正しいです、ありがとうございます – Kai

答えて

0

配列は、最初の項目はインデックス0である意味、ベース0です: コードが常に表示される「タイプエラー、未定義のプロパティ 『一致』を読み取ることができない」、 はここのコードです。配列内に3つのアイテムがあるとしたら、プロパティは3と表示され、3つのアイテムはインデックス0,1および2を占めます。あなたのforループでは

は、あなたが(インデックス0で)最初の項目をスキップするループを意味し、インデックス1i=1;)で開始し、i下または配列の長さに等しい間、あなたは繰り返します。配列の長さは3ですが、基数0のため配列の最後の項目はインデックス2になります。だからあなたのforループの最後の反復では、undefinedという配列のインデックス3にアクセスしようとします。あなたが適切012の代わり123

を反復します

(i = 0; i < arr.length; i++) 

この方法は:

だから、何をする必要があると、このように見えるためにあなたのforループ式を変更することです

+0

私はしようとしましたが、それでも動作しませんでしたが、ありがとう – Kai

+0

ありがとう、今は動作します! – Kai

1

JS配列のインデックスはゼロから始まります。

newstring=arr1.join; 

それは

newstring=arr1.join(''); 

または単にARR1せずに結果の文字列を生成する必要があり、同様に: あなたはまた、別の文も間違ってい

for (i = 0; i < arr.length; i += 1) { 

に文のためにあなたを変更する必要があります:

newstring=''; 
... 
newstring+=arr[i]; 
+0

私はしようとしましたが、それでも動作しませんでした。同じエラーが表示されました – Kai

+0

うわー、今は動作します!ありがとうございました – Kai

関連する問題