2014-12-05 61 views
0

如何將每個第三個字符轉換爲大寫。例如將此字符串pifedvcbtauzkwgnxyjrhmq轉換爲piFedVcbTauKkwGnxYjrHmq。將每個第三個字母轉換爲大寫

這裏是我到目前爲止

function up3rdletter(str){ 
     var i, result = ''; 
     for(i = 0; i < str.length; i++){ 
      if(i > 0 && i % 3 == 0){ 
       result += str[i].toUpperCase(); 
      }else{ 
       result += str[i]; 
      } 
     } 
     return result; 
    } 

完成上面的腳本返回pifEdvCbtAuzKwgNxyJrhMq,它開始從第四個字母轉換。如果我改變了模數2之成爲piFeDvCbTaUzKwGnXyJrHmQ

+3

'if(i%3 === 2)'...(或'if((i + 1)%3 === 0)'),就這麼簡單。 ) – raina77ow 2014-12-05 08:55:41

+0

哇,briliant!請將此評論置於答案中,以便我可以接受 – 2014-12-05 08:57:27

+0

使用條件運算符的好機會:'result + =(i + 1)%3? str [i]:str [i] .toUpperCase()'。 ;-)。並非所有瀏覽器都支持按索引訪問字符串,* charAt *可能是更好的選擇。 – RobG 2014-12-05 09:04:18

回答

1

這是相當簡單:在索引JS從0開始,但你要根據-1開始的索引,自然爲人類改變字母。 )解決方案?無論是轉移剩餘檢查:

result += i % 3 === 2 ? str[i].toUpperCase() : str[i]; 

...或去反對0檢查,但推進i代替:

result += (i + 1) % 3 ? str[i] : str[i].toUpperCase(); 

但實際上,如下我可能會寫:

result = str.replace(/(..)(.)/g, function(_, m1, m2) { 
    return m1 + m2.toUpperCase(); 
}); 
+0

我知道在從0開始索引編制。我只是混淆了使用正確的模數返回號碼,改爲您的建議,它的作品很好..真棒! – 2014-12-05 09:13:43

0
function up3rdletter(str){ 
     var i, result = ''; 
     var counter = 1; 
     for(i = 0; i < str.length; i++){ 
      if(i > 0 || counter % 3 == 0){ 
       result += str[i].toUpperCase(); 
      }else{ 
       result += str[i]; 
      } 
     counter++; 
     } 
     return result; 
    } 
相關問題