1

我一直在 Coderbyte 解决一些简单的 JavaScript 挑战。其中之一是取一个字符串并将每个单词的第一个字母大写。我已经解决了这几种方法。首先通过将单词转换为数组,然后通过“操作”字符串本身。我想知道是否首选这些选项中的任何一个?也就是说,我收到了一些反馈,建议操作字符串通常不是一个好主意,因为它们是不可变的,这意味着我并不是真的在操作字符串,而是用另一个字符串替换一个字符串。我不确定为什么这是一件坏事。可能是内存问题还是速度问题?无论如何,我的解决方案如下。对于任何反馈,我们都表示感谢。

function LetterCapitalize(str) { 

  str = str.split(" ");
  for (i=0; i<str.length; i++){
    str1 = str[i].split("");
    str1[0] = str1[0].toUpperCase();
    str[i] = str1.join("");
  }
  str = str.join(" ");
  return str;        
}

function LetterCapitalize(str) { 
  str = str.split(" ");
  for (var i=0; i<str.length; i++){
  console.log(str[i].length);
    str[i]=str[i].charAt(0).toUpperCase()+str[i].slice(1,str[i].length);
  }
  str = str.join(" ");
  return str; 
}
4

2 回答 2

1

最好的做法是确保它是可读的,在你想要支持的浏览器/平台上工作,并且执行速度很快。速度很简单,所以我将您的代码添加到这个 jsPerf 中,并且还找到了另一个关于将第一个字母大写的 jsPerf:

您的代码示例:http: //jsperf.com/capitalize-first-letter-2

其他 jsPerf 也差不多:http: //jsperf.com/capitalize-first-letter

于 2013-10-29T19:49:42.263 回答
0

根据我的经验,性能差异不值得担心..除非您发现自己一次使用数百万个单词,但也许您不应该使用 javascript 来解决问题。

虽然字符串是不可变的,但简单的字符串连接仍然比转换为数组并返回字符串只是为了修改一个元素要便宜。

使用 javascript 时,我更喜欢可读性而不是微观性能提升。

function capitalizeFirstLetter(str) {
    return str[0].toUpperCase() + str.slice(1);
}

我在这里修改了 jsperf ,结果证明这也比其他两个快得多。

于 2013-10-29T19:54:07.507 回答