2014-01-20 64 views
-3

我認爲我寫的功能不好。我試圖簡化它,但保留了功能。試圖簡化這個javascript函數

function changeLetters(text) { 
    text = text.toLowerCase(); 
    for (var i = 0; i < text.length; i++) { 
    var alphabet = advanced.checked ? alphabets[text[i]] || alphabets2[text[i]] : alphabets[text[i]]; 
    if (alphabet) { 
     text = text.replace(text[i], alphabet); 
    } 
    } 
    return text; 
} 

一種方法是這樣的:

function changeLetters(text) { 
    var alphabets = advanced.checked ? alphabets || alphabets2 : alphabets; 
    return text.toLowerCase().replace(/[a-z]/g, function(letter) { 
    return alphabets[letter] || letter; 
    }); 
} 

但隨着第二功能的問題是,它不檢查alphabetalphabet2對象甚至advanced檢查。我的意思是這條線什麼都不做advanced.checked ? alphabets || alphabets2 : alphabets

任何方法來簡化這個功能? 謝謝。

+0

你能不能給我們一些投入和預期產出?什麼是「字母」,「字母2」和「高級」? –

+0

這裏是 - http://jsbin.com/AREZoCig/6/ – user3208070

回答

1

上兩個陣列使用||操作者是不一樣使用它從陣列中的兩個項目。

重寫原則更好,因爲它不會替換每個要替換的字符的整個字符串,而且它允許您用另一個字符替換字符,而不會有後來替換的風險循環。

你仍然需要做從環陣列中的項目的操作:

function changeLetters(text) { 
    return text.toLowerCase().replace(/[a-z]/g, function(letter) { 
    return (advanced.checked ? alphabets[letter] || alphabets2[letter] : alphabets[letter]) || letter; 
    }); 
} 
+0

是'toLowerCase()'比向正則表達式添加'i'更高效嗎? –

+0

@JeremyMiller:可能不會,但它不會給出相同的結果。 – Guffa

+0

在相同的結果語句中表達不夠。 :) 謝謝(你的)信息。 –