我认为我写的功能很糟糕。我试图简化它,但保留了功能。
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;
});
}
但第二个功能的问题是它不检查alphabet
和alphabet2
个对象,甚至advanced
被检查。我的意思是这一行没有做advanced.checked ? alphabets || alphabets2 : alphabets
有什么方法可以简化这个功能? 感谢。
答案 0 :(得分:1)
在两个数组上使用||
运算符与在数组中的两个项目上使用它不同。
重写的原则是更好的,因为它不会替换每个要替换的字符的整个字符串,并且它允许您将字符替换为另一个字符,而不会在以后替换该字符的风险循环。
您仍然需要对循环中数组中的项进行操作:
function changeLetters(text) {
return text.toLowerCase().replace(/[a-z]/g, function(letter) {
return (advanced.checked ? alphabets[letter] || alphabets2[letter] : alphabets[letter]) || letter;
});
}