2013-11-09 107 views
1

在循環顯示該字符串時,警報會打印出4次(正確)測試,但最後還會打印「未定義」。我如何使它不返回undefined。最後一次迭代返回undefined

這將返回 - undefinedCAFE ::

alert(match("abcdef", "CAfe")); 


function match(string, pattern) { 

    var patternUpperCase = pattern.toUpperCase(); 
    var stringUpperCase = string.toUpperCase(); 
    var stringConcatenate; 
    var answer; 

    for (var i = 0; i < patternUpperCase.length; i++) { 
     if (patternUpperCase.charAt(i) != undefined) { 
      if (patternUpperCase.charAt(i) >= 'A' && patternUpperCase.charAt(i) <= 'Z') { 
       stringConcatenate += patternUpperCase.charAt(i); 
       alert("test"); 
      } 
     } 
    } 
    return stringConcatenate; 
} 

這是個什麼功能需要做:如果所有模式的各個字母出現在字符串(不分次序)(不區分大小寫)

返回true

例子 比賽( 「ABCDEF」, 「@ C2D!」)返回true 比賽( 「ABCDEF」, 「咖啡」)返回true 比賽( 「ABCDEF」, 「CG」)返回false

+0

注意'.charAt()'從未返回undefined。如果索引超出範圍,則返回空字符串(例如''「」')。 –

回答

0

爲什麼不使用rege x函數?

alert(!/[^pattern]/.test(string)); 

還是要使其符合@符號:

alert(!/[^pattern]/.replace(/[^a-zA-Z]/, '').test(string)); 

最後一個例子除了AZ(上,下)刪除所有內容,然後測試,如果任何禁用的字符是剩餘的字符串中。

因爲這會給出一個true當它找到一個「錯」字,用!

+0

我猜他試圖自己實現功能。另外,正則表達式會顯着變慢。 –

+0

@Martijn我們還沒有在我的大學課程中學到正則表達式,所以我不能使用它。 – user2964960

+0

大聲笑,但這是一個很好的例子,正則表達式有什麼好處:P – Martijn

2

你的錯誤是因爲你contactenating未初始化字符串與其他字符串扭轉它。

這條線(對於第一次迭代):

stringConcatenate += patternUpperCase.charAt(i); 

stringConcatenate沒有被初始化全文:

stringConcatenate = "undefined" + patternUpperCase.charAt(i); 

所以這樣做在你的代碼:

var stringConcatenate = ""; 

小記訪問字符串的字符:
如果使用String.charAt()方法,你的返回值的測試應該是如下因素:

if(somestring.charAt(x)!="") 
    ... valid 

但是,您也可以通過數組運算符[x]訪問偏移量字符串。這一個確實退步undefined

if(typeof somestring[x]!="undefined") 
0

首先將stringConcatenate設置爲字符串變量。

alert(match("abcdef", "CAfe")); 


function match(string, pattern) { 

    var patternUpperCase = pattern.toUpperCase(); 
    var stringUpperCase = string.toUpperCase(); 
    var stringConcatenate = ''; 

    for (var i = 0; i < patternUpperCase.length; i++) { 
     if (patternUpperCase.charAt(i) != undefined) { 
      if (patternUpperCase.charAt(i) >= 'A' && patternUpperCase.charAt(i) <= 'Z') { 
       stringConcatenate += patternUpperCase.charAt(i); 
       console.log(stringConcatenate); 
      } 
     } 
    } 
    return stringConcatenate; 
} 
0

錯誤: 1. stringConcatenate未初始化。 2.你的代碼是不完整的,因爲它沒有檢查模式字母出現在'字符串'中的條件。

這應該解決您的問題:

function fooo(){ 
str = "abcdsdfef"; 
pattern = "d234g4f"; 
var patternUpperCase = pattern.toUpperCase(); 
var stringUpperCase = str.toUpperCase(); 
var stringConcatenate=""; 
var answer = true; 

for (var i = 0; i < patternUpperCase.length; i++) { 
    if (patternUpperCase.charAt(i) != undefined) { 
     if (patternUpperCase.charAt(i) >= 'A' && patternUpperCase.charAt(i) <= 'Z') { 
      stringConcatenate += patternUpperCase.charAt(i); 
    if(stringUpperCase.indexOf(patternUpperCase.charAt(i)) == -1){ 
     answer = false; 
     break; 
    } 
     } 
    } 
} 
alert(answer); 

}

相關問題