试图简化这个javascript函数

时间:2014-01-20 07:55:51

标签: 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

有什么方法可以简化这个功能? 感谢。

1 个答案:

答案 0 :(得分:1)

在两个数组上使用||运算符与在数组中的两个项目上使用它不同。

重写的原则是更好的,因为它不会替换每个要替换的字符的整个字符串,并且它允许您将字符替换为另一个字符,而不会在以后替换该字符的风险循环。

您仍然需要对循环中数组中的项进行操作:

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